Python 如何将多个文件上载到BlobStore?

Python 如何将多个文件上载到BlobStore?,python,google-app-engine,forms,google-cloud-datastore,blobstore,Python,Google App Engine,Forms,Google Cloud Datastore,Blobstore,我正在尝试将表单中的多个文件上载到BlobStore 表格: 我看到一些奇怪的行为。这两个文件都进入了BlobStore,但我不知道如何获取密钥以便将它们存储在另一个实体上。上面的代码设法获取image\u blob\u info的键,但不能获取thumb\u blob\u info。我不知道如何使用get_上传。我想通过表单传递多个文件,然后按名称获取它们,这样我就可以将它们存储在另一个实体的相应BlobreReferenceProperties中。每个文件都需要自己独特的上载url,所以我猜

我正在尝试将表单中的多个文件上载到BlobStore

表格:


我看到一些奇怪的行为。这两个文件都进入了BlobStore,但我不知道如何获取密钥以便将它们存储在另一个实体上。上面的代码设法获取image\u blob\u info的键,但不能获取thumb\u blob\u info。我不知道如何使用get_上传。我想通过表单传递多个文件,然后按名称获取它们,这样我就可以将它们存储在另一个实体的相应BlobreReferenceProperties中。

每个文件都需要自己独特的上载url,所以我猜当所有三个文件都发布到同一url时,会发生一些奇怪的事情

Nick Johnson的博文中介绍了支持多文件上传的最佳解决方案:


您可以将文件发布到相同的名称,然后是
[]
,这将发布一个数组:

<form action="{{upload_url}}" method="POST" enctype="multipart/form-data">
  <label>Key Name</label><input type="text" name="key_name" size="50"><br/>
  <label>name</label><input type="text" name="files[]" size="50"><br/>
  <label>image</label><input type="file" name="files[]" size="50"><br/> 
  <label>thumb</label><input type="file" name="thumb" size="50"><br/> 
  <input type="submit" name="submit" value="Submit">
</form>

使用最新版本的plupload,我能够让UploadQueue与GAE一起使用这段代码。注意,它是CoffeeScript,但如果您确实需要的话,应该很容易转换回JavaScript。它假设您从服务器返回一点json作为{url:“gae生成的url”}


尼克博客上的解决方案比我需要的多得多。但是这里有用的答案是“每个文件都需要自己唯一的上传url”。如果每个文件都需要自己唯一的上传url,为什么
blobstoreuloadhandler.get\u uploads()
会返回
BlobInfo
对象的列表?Blobstore似乎只需要一个图像,但
BlobstoreUploadHandler
似乎设计用于处理多个图像。我最后做的是创建两个upload\u url变量,因为我一次只需要两个upload\u url文件。如果您有n个文件要上传(但不容易实现),Karl引用的解决方案是好的。您要求用户上传缩略图有什么原因吗?您是否知道get_serving_url,它将允许您从完整大小的图像生成缩略图?这是针对管理页面的,作为解决BlobStore仅支持表单帖子这一事实的一种方法(您不能以编程方式存储url)。话虽如此,我不知道如何获取url。这是BlobStore的一部分吗?我一直试图让plupload的家伙在每次上传之前支持异步工作。我们快到了。继续
def post(self):
    image_upload_files = self.get_uploads('image') 
    thumb_upload_files = self.get_uploads('thumb') 
    image_blob_info = image_upload_files[0]
    thumb_blob_info = thumb_upload_files[0]
<form action="{{upload_url}}" method="POST" enctype="multipart/form-data">
  <label>Key Name</label><input type="text" name="key_name" size="50"><br/>
  <label>name</label><input type="text" name="files[]" size="50"><br/>
  <label>image</label><input type="file" name="files[]" size="50"><br/> 
  <label>thumb</label><input type="file" name="thumb" size="50"><br/> 
  <input type="submit" name="submit" value="Submit">
</form>
for uploaded_file in request.FILES.getlist('files'):
    #do something with uploaded_file
    $("#fileUploader").pluploadQueue
        runtimes : 'html5,html4'
        use_query_string : false
        max_file_size : '3mb'
        multipart: true
        unique_names : true
        multiple_queues : true
        filters : [{title : "Image files", extensions : "jpg,gif,png"}]
        preinit:
            UploadFile: (up, file) ->
                $.ajax
                    url: '/api/upload/url'
                    async: false
                    success: (data) ->
                        up.settings.url = data.url