我使用自定义函数上传文件,将其拆分为块,如此处所述。我的问题是在上传我的文件两次save()
后调用handle_uploaded_file()
,一次进入“MEDIA_URL/my_path”目录,一次进入“MEDIA_URL”。但我只想上传一个,一个有块的。可以强制save()
进行“分块”上传吗?还是我应该使用不同的方法?谢谢你。
模型.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')
表格.py
class UploadForm(ModelForm): class Meta: model = ShapeFile fields = ('name','user','srid','file','color_table') widgets = {'srid': TextInput(), 'user': HiddenInput()
视图.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))