Django 分块上传文件:避免保存两次
我使用一个自定义函数上传一个文件,并将其分块,如文档所示。 我的问题是在Django 分块上传文件:避免保存两次,django,file-upload,django-models,django-forms,django-views,Django,File Upload,Django Models,Django Forms,Django Views,我使用一个自定义函数上传一个文件,并将其分块,如文档所示。 我的问题是在handle\u upload\u file()之后调用save()会将我的文件上载两次,一次上载到“MEDIA\u URL/My\u path”目录,另一次上载到“MEDIA\u URL”。 但我只希望有一个上传,一个与块。 是否可以强制save()进行“分块”上传? 或者我应该使用不同的方法? 多谢各位 models.py class ShapeFile(models.Model): name = models
handle\u upload\u file()
之后调用save()
会将我的文件上载两次,一次上载到“MEDIA\u URL/My\u path”目录,另一次上载到“MEDIA\u URL”。
但我只希望有一个上传,一个与块。
是否可以强制save()
进行“分块”上传?
或者我应该使用不同的方法?
多谢各位
- models.py
class ShapeFile(models.Model): name = models.CharField(max_length=100) srid = models.ForeignKey(SpatialRefSys) user = models.ForeignKey(User) color_table = models.ForeignKey(ColorTable) file = models.FileField(upload_to="my_path") class Meta: unique_together = ('name', 'user')
- forms.py
class UploadForm(ModelForm): class Meta: model = ShapeFile fields = ('name','user','srid','file','color_table') widgets = {'srid': TextInput(), 'user': HiddenInput()
- views.py
def handle_uploaded_file(fileName, filePath): with open(filePath, 'wb+') as destination: for chunk in fileName.chunks(): destination.write(chunk) @login_required def shapeIng(request): if request.method == 'POST': form = UploadForm(request.POST, request.FILES) if form.is_valid(): req = request.POST # Split uploaded file into chunks fileName = request.FILES['file'] filePath = ShapeFile(file=fileName).file.path handle_uploaded_file(fileName, filePath) form.save() messages.success(request, 'Shapefile upload succesful!') return redirect('shapeCreated') else: messages.error(request, 'Something went wrong uploading Shapefile.') else: # request.method == 'GET' form = UploadForm(initial={'user': request.user}) return render_to_response('my_app/base_shapeIngestion.html', {'form': form}, context_instance=RequestContext(request))
def testupload2(request):
if request.method == 'POST':
file_name=request.FILES['file']
form = SomeForm(request.POST, request.FILES)
if form.is_valid():
dest_file = open('C:/prototype/upload/'+ str(file_name), 'wb+')
path = 'C:/prototype/upload/'+ str(file_name)
for chunk in request.FILES['file'].chunks():
dest_file.write(chunk)
dest_file.close()
t = get_template("testupload2.html")
lst = os.listdir('C:/downloads/prototype/prototype/upload/')
html = t.render(Context({'MEDIA_URL':'http://127.0.0.1:8000/site_media/'}))
return HttpResponse(html)
尝试不要将
请求.FILES
传递到上传表单
。仅用于处理程序。如果我这样做,则不满足is\u valid()
方法,并且我正确地在页面上获得“This field is required”(此字段是必需的)消息,即使我选择了要上载的字段。到\u json
和arr
变量的目的是什么?如果不使用form.save()
,如何保存表单的其他4个元素?为什么要使用HttpResponse
?@caneta我在写答案时,在我的项目中使用了这两项功能,但我忘了删除它们OK…那么要从表单中保存的其他元素呢?