我使用自定義函數上傳文件,如文件here所示,將文件分成塊。 我的問題是handle_uploaded_file()
上傳我的文件兩次後,調用save()
,一個上傳到「MEDIA_URL/my_path」目錄,一個上傳到「MEDIA_URL」。 但我想只有一個上傳,一個大塊。 可以強制save()
上傳'chunked'嗎? 或者我應該使用不同的方法? 謝謝。使用塊上傳文件:避免保存兩次
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))
嘗試不將'request.FILES'傳遞給'UploadForm'。僅用於處理程序。 – 2013-04-24 14:07:12
如果我這樣做了,即使我選擇了一個要上傳的字段,'is_valid()'方法也不能滿足,並且我在頁面上正確地獲得了「此字段是必需的」消息。 – caneta 2013-04-29 11:19:26