情况:一个 html 表单(正确设置了 method="POST"和 enctype="multipart/form-data"属性)被提交到服务器,即 Google AppEngine 上的 Django。它包含一个文件输入,该文件输入被移动(而不是克隆)到所述表单中并通过 iframe 提交。对于小文件(~1mb 或更小),提交的文件可以在 request.FILES 字典中找到,并存储在 blob 中。然而,对于 1mb 以上的文件,对 request.FILES 的查看会返回错误,声称在给定的字典中找不到键(文件输入元素的名称),事实上 request.FILES (和request.POST) 字典为空。
问题:这是否是由于 AppEngine 限制造成的(如果是,是否有解决方法?)这是否与 Django 以某种方式相关(请注意,enctype 和方法已正确设置)?是否还缺少其他一些元素?
其他信息:另请注意,我是一名 javascript 程序员,填补了缺席的 Python 程序员的空缺,只了解基础知识。请相应地调整您的答案。
相关Python:
def media_image_upload(request):
if request.method == 'POST':
img = request.FILES['img']
相关html:
<form id="hiddenUpForm" style="display:none;" action="http://localhost:8080/media/imageUpload" enctype="multipart/form-data" target="upTarget" method="POST">
<input name="img" id="img" type="file" accept="image/*">
<iframe id="upTarget" name="upTarget" src="" style="width:0;height:0;border:0px solid #fff;"></iframe>
</form>
最佳答案
我认为,为了上传大于 1 MB 的文件,您需要使用 Blobstore API 创建一个用于上传的特殊 URL;它不能是您常规的 <1 MB 网址。
生成包含上传表单的 HTML 页面的 Controller 代码将使用 upload_url = blobstore.create_upload_url('media/imageUploadBig')
,然后将 upload_url
添加到您的模板值并渲染模板。
模板又将包含如下所示的 FORM 定义:
<form id="hiddenUpForm" style="display:none;" action="{{ upload_url|safe }}" enctype="multipart/form-data" target="upTarget" method="POST">
这意味着您要么需要两种不同的形式 - 一种用于小于 1 MB 的文件,另一种用于较大的文件 - 或者您可以将所有图像存储在 Blobstore 中。
请参阅Blobstore docs了解更多信息。
关于python - Google AppEngine、Django 和 request.FILES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9608859/