不使用webapp2时如何处理/过滤上传

时间:2014-03-12 10:17:13

标签: python google-app-engine python-2.7

我正在使用自定义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

我想首先避免上传,稍后检查类型是否有效,如果没有则删除,这样我就无法用垃圾填满我的存储空间,以防我无法处理/获取上传密钥。

有什么想法吗?

0 个答案:

没有答案