【问题标题】:Django Python uploading a file to a specific folderDjango Python将文件上传到特定文件夹
【发布时间】:2018-10-23 15:51:27
【问题描述】:

我正在开发一个 Django 应用程序,我希望用户能够将 csv 文件上传到服务器中的文件夹。感谢您能指出我正确的方向。

【问题讨论】:

  • 添加您的设置、视图和模板

标签: django python-3.x python-2.7 django-views


【解决方案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
  • {% csrf_token %} {{ form.as_p }}
  • 我很确定您的问题出在 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_storageContentFile 将其保存到您的服务器

    def filehandler(request):
        incomingfile = request.FILES['file']
        default_storage.save("pathtofolder", ContentFile(incomingfile.read()))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      相关资源
      最近更新 更多