python - Google AppEngine、Django 和 request.FILES

标签 python html django google-app-engine

情况:一个 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/

相关文章:

Python 与闪存

android - 在 Android 上使用 Python 检索 WiFi 数据

python - 在 python3.6 上安装 pycrypto

html - 在 Outlook 中显示 CSS 按钮

python - 使用 browser.wait 时 Protractor 无法正常运行,msg : "Wait timed out after XXXms"

python - csv 格式的数据,用双引号括起来

html - Firefox CSS3 对象适合 : cover strange behaviour during transition

html - 显示替代文字时的 img 大小

python - 从两个列表制作字典

javascript - 在 GET 请求中使用 django 和 AJAX 在输入更改时立即更新页面元素