【发布时间】:2013-09-19 05:21:31
【问题描述】:
我想根据下一个要求限制文件上传期间的大小:
1- 客户端(这几乎是不可能的,除非使用 Flash 或 Applets 等客户端插件)所以我放弃了这个
2-在服务器端,我可以在将文件/图像/视频存储到数据库之前知道它的大小吗?
谢谢!
【问题讨论】:
标签: google-app-engine file-upload limit
我想根据下一个要求限制文件上传期间的大小:
1- 客户端(这几乎是不可能的,除非使用 Flash 或 Applets 等客户端插件)所以我放弃了这个
2-在服务器端,我可以在将文件/图像/视频存储到数据库之前知道它的大小吗?
谢谢!
【问题讨论】:
标签: google-app-engine file-upload limit
使用Blobstore服务,目前无法限制文件大小上传(打开问题here)。
使用简单的BlobProperty 存储数据,您可以在上传后使用len(uploaded_blob) 检查 blob 的大小。
编辑:
现在是fixed
【讨论】:
自 1.5.4 版以来,create_upload_url 采用了可限制上传大小的额外可选参数
create_upload_url(success_path, max_bytes_per_blob=None, max_bytes_total=None, rpc=None, gs_bucket_name=None)
据我所知,max_bytes_per_blob 限制了每个上传文件的大小,而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");
}
}
});
【讨论】:
如果您使用的是 Google Blobstore(您可能会使用 App Engine),那么我认为您遇到了一些困难。作为this post states,您的选择是立即检查文件大小并在太大时将其删除。也许在架构上,Google 很难在数据存储之前在 BlobStore 上提供验证。我不知道。
也许您想在Google App Engine Issue Tracker 上为该问题加注星标。目前尚不清楚您使用的是 Java 还是 Python,但如果您查看相关的 Google API 文档,您可以确定如何检查 Blob 条目的大小。
【讨论】: