[英]Simply save file to folder in Django
我有一段代碼通過POST從表單中獲取文件。
file = request.FILES['f']
將此文件保存到我的媒體文件夾的最簡單方法是什么?
settings.MEDIA_ROOT
我正在看這個答案 ,但其中有錯誤引用了未定義的名稱和無效的“塊”方法。
必須有一個簡單的方法來做到這一點?
我的views.py中的EDIT上傳方法:
def upload(request):
folder = request.path.replace("/", "_")
uploaded_filename = request.FILES['f'].name
# create the folder if it doesn't exist.
try:
os.mkdir(os.path.join(settings.MEDIA_ROOT, folder))
except:
pass
# save the uploaded file inside that folder.
full_filename = os.path.join(settings.MEDIA_ROOT, folder, uploaded_filename)
fout = open(full_filename, 'wb+')
file_content = ContentFile( request.FILES['f'].read() )
# Iterate through the chunks.
for chunk in file_content.chunks():
fout.write(chunk)
fout.close()
使用default_storage
比FileSystemStorage
更好。
您可以使用FileSystemStorage
將文件保存到MEDIA_ROOT
,但是當您將來更改DEFAULT_FILE_STORAGE
后端時,這可能不再起作用。
如果您使用default_storage
,將來如果您想使用aws,azure等作為具有多個Django worker的文件存儲,您的代碼將無需任何更改即可使用。
default_storage用法示例:
from django.core.files.storage import default_storage
# Saving POST'ed file to storage
file = request.FILES['myfile']
file_name = default_storage.save(file.name, file)
# Reading file from storage
file = default_storage.open(file_name)
file_url = default_storage.url(file_name)
你可以上傳文件到django服務器::
from django.shortcuts import render
from django.conf import settings
from django.core.files.storage import FileSystemStorage
def upload(request):
folder='my_folder/'
if request.method == 'POST' and request.FILES['myfile']:
myfile = request.FILES['myfile']
fs = FileSystemStorage(location=folder) #defaults to MEDIA_ROOT
filename = fs.save(myfile.name, myfile)
file_url = fs.url(filename)
return render(request, 'upload.html', {
'file_url': file_url
})
else:
return render(request, 'upload.html')
你可以使用django FileField
,它支持指定upload_to
參數,如下所示:
data_file = models.FileField(upload_to=content_path)
其中content_path
可以是字符串或返回字符串的函數。
使用以下代碼更新FileField
或ImageField
。 Django默認將文件上傳到settings.MEDIA_ROOT
。
from os.path import basename
from django.core.files import File
self.model.file_field.save(basename(path), content=File(open(path, 'rb')))
您可以訪問以下詞語:
這樣的路徑:
self.model.file_field.path
這樣的網址:
self.model.file_field.url
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.