我正在使用自定义python框架(不是django或webapp2),遵循以下说明: Create an upload URL,我可以上传文件,基本上我将表单提交到脚本提供的URL这样:
from google.appengine.ext import blobstore
upload_url = blobstore.create_upload_url('/upload')
通过检查 blobstore viewer ,我注意到该文件已上传,这引出了我的第一个问题。
如何在上传前过滤?例如,如果图像类型是jpg或png并且丢弃其他任何内容,如何上传。
我的第二个问题是,如何正确处理上传的文件,到目前为止我发现的是创建一个自定义的get_uploads方法,这就是我正在使用的但是想知道是否是正确的方法:
import cgi
from google.appengine.ext import blobstore
class APIResource(object):
def get_uploads(self, request, field_name=None):
if hasattr(request, '__uploads') == False:
request.environ['wsgi.input'].seek(0)
fields = cgi.FieldStorage(
request.environ['wsgi.input'],
environ=request.environ)
request.__uploads = {}
for key in fields.keys():
field = fields[key]
if isinstance(field, cgi.FieldStorage):
if 'blob-key' in field.type_options:
request.__uploads.setdefault(
key, []).append(
blobstore.parse_blob_info(field))
if field_name:
try:
return list(request.__uploads[field_name])
except KeyError:
return []
else:
results = []
for uploads in request.__uploads.itervalues():
results.extend(uploads)
return results
def dispatch(self, request, response):
blob_info = self.get_uploads(request, 'picture')[0]
print blob_info, blob_info.key(), request.__uploads
我想首先避免上传,稍后检查类型是否有效,如果没有则删除,这样我就无法用垃圾填满我的存储空间,以防我无法处理/获取上传密钥。
有什么想法吗?