如何上传多个文件到BlobStore?
我正在尝试通过一个表单上传多个文件到BlobStore。
表单内容:
<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="name" size="50"><br/>
<label>image</label><input type="file" name="image" size="50"><br/>
<label>thumb</label><input type="file" name="thumb" size="50"><br/>
<input type="submit" name="submit" value="Submit">
</form>
接着,我想获取每个上传文件的BlobInfo对象:
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]
我遇到了一些奇怪的问题。两个文件都成功上传到了BlobStore,但我不知道怎么获取它们的键,以便我可以把这些键存储在另一个实体上。上面的代码能获取到image_blob_info的键,但却无法获取thumb_blob_info的键。我不太明白怎么使用get_uploads。我想通过表单传递多个文件,然后按名称获取它们,这样我就可以把它们存储在另一个实体的BlobReferenceProperties中。
3 个回答
0
我使用最新版本的plupload,成功让UploadQueue在GAE上运行,下面这段代码就是实现的关键。需要注意的是,这段代码是用CoffeeScript写的,不过如果你需要的话,转换成JavaScript应该也不难。代码假设你从服务器得到了一些json格式的数据,内容是{url:"gae生成的url"}
$("#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
1
你可以把文件上传到同一个名字后面加上 []
,这样就会把它们当作一个数组上传:
<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
5
每个文件都需要一个独特的上传网址,所以我猜当三个文件同时上传到同一个网址时,可能会发生一些奇怪的事情。
支持多个文件上传的最佳解决方案在Nick Johnson的博客中有详细描述: