2011-06-05 71 views
4

我想根据未来需求的文件上传过程中限制大小:谷歌应用程序引擎 - 限制文件大小上载

1-客户端(这几乎是不可能的,除非使用客户端插件,如Flash或小程序)所以我放弃了这一个

2-在服务器端,我可以知道文件/图像/视频的大小,然后将其存储在数据库中?

谢谢!

回答

6

随着Blobstore服务,目前没有办法限制文件大小上传(开放问题here)。
使用简单的BlobProperty存储您的数据,您可以使用len(uploaded_blob)检查上传后斑点的大小。

编辑
这是目前fixed

1

如果您使用的是Google Blobstore(您可能会使用App Engine),那么我认为您遇到了一些困难。由于this post states您的选择是立即检查文件大小,并删除它,如果太大。在架构上,Google可能很难在数据存储之前在BlobStore上提供验证。我不知道。

也许你想对Google App Engine Issue Tracker上的问题加星标。目前还不清楚您是使用Java还是Python,但如果您查看相关的Google API文档,您可以确定如何检查Blob条目的大小。

2

自发布1.5.4 create_upload_url需要额外的可选参数正如我得到它max_bytes_per_blob限制的大小,可以限制上传大小

create_upload_url(success_path, max_bytes_per_blob=None, max_bytes_total=None, rpc=None, gs_bucket_name=None) 

每个文件都被上传,而max_bytes_total限制了在一个请求中上传的所有文件的总大小。 详见https://developers.google.com/appengine/docs/python/blobstore/functions

例如限制上传大小5MB,这样称呼它:

upload_url = blobstore.create_upload_url('/upload', max_bytes_total=5000000) 

如果上传大小比限制,HTTP状态413大(请求实体过大)返回。 如果你需要,你可以像这样在jQuery中拦截它:

$("#file_form").ajaxForm({ 
     success : function(response) { 
      ... 
     }, 
     error : function(jqXHR, textStatus, errorThrown) { 
      if (jqXHR.status == 413) { 
       $("#error_message").text("Uploaded files should not be larger than 5MB"); 
      } 
     } 
    });