Django Python将文件上传到特定文件夹
Posted
技术标签:
【中文标题】Django Python将文件上传到特定文件夹【英文标题】:Django Python uploading a file to a specific folder 【发布时间】:2018-10-23 15:51:27 【问题描述】:我正在开发一个 Django 应用程序,我希望用户能够将 csv
文件上传到服务器中的文件夹。感谢您能指出我正确的方向。
【问题讨论】:
添加您的设置、视图和模板 【参考方案1】:您可以使用 django FileField
直接通过管理面板将文件上传到指定文件夹,同样可以使用普通用户的表单完成。
upload = models.FileField(upload_to='uploads/your-folder/')
【讨论】:
我这样做了,但是当我将文件上传到特定文件夹时。我检查了文件夹,但文件夹是空的。我的观点是 def uploadfunc(request): if request.method=='POST': form =uploadfileform(request.POST,request.FILES) if form.is_valid(): form.save() return render_to_response('upload_successful.html ') else: form=uploadfileform() return render(request, 'upload.html','form':form) 在此处添加您的form.html
。
我很确定您的问题出在 settings.py
中的 MEDIA_ROOT
和/或 MEDIA_URL
设置中,但我错了很多
谢谢你。 MEDIA_ROOT 有问题。顺便说一句,是否可以覆盖与当前上传的同名的上传文件。【参考方案2】:
这是我的完整解决方案
#view.py
def uploadfunc(request):
if request.method=='POST':
form =uploadfileform(request.POST,request.FILES)
if form.is_valid():
form.save()
return render_to_response('upload_successful.html')
else:
form=uploadfileform()
return render(request, 'upload.html','form':form)
#models.py
class uploadfolder(models.Model):
""" my application """
File_to_upload = models.FileField(upload_to='')
#forms.py
#uploading file form
class uploadfileform(forms.ModelForm):
class Meta:
model=uploadfolder
fields=('File_to_upload',)
#upload.html
<form method="post" action="% url 'uploadfunc'%" enctype="multipart/form-data">
% csrf_token %
form.as_table
<!-- <button type="submit">Upload</button>-->
<input class="btn btn-primary btn-md" role="button" type="submit" name="submit" value="Upload File" >
</form>
#settings.py
MEDIA_ROOT = "/var/www/vmachines/registry/files/"
MEDIA_URL = "files/"
【讨论】:
【参考方案3】:客户端可以通过多部分请求发送文件。下面的代码演示了使用requests
的多部分请求
import requests
url = "http://someurl"
files = "file" : ("somename.txt", open("pathtofile", "rb"))
requests.post(url, files=files)
这将在您的服务器中为您提供一个 InMemoryFile,然后您可以使用 django 内置的 default_storage
和 ContentFile
将其保存到您的服务器
def filehandler(request):
incomingfile = request.FILES['file']
default_storage.save("pathtofolder", ContentFile(incomingfile.read()))
【讨论】:
以上是关于Django Python将文件上传到特定文件夹的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 django (python) 和 s3 上传文件?