4

我有一个在 Eclipse 上使用 Python2.7 和 Django1.2 的 Google Appengine 项目,它允许用户使用表单来上传图片、调整大小并将其存储为 BLOB 字段。

我在下面指出的位置添加了一个断点,并在“表达式”视图中看到“文件 ['content']”显示了一个值“TypeError: 'InMemoryUploadedFile' object is not subscriptable”。

当我踏入或越过这条线时,它会跳转到错误处理程序。

有人可以告诉我如何解决这个问题吗?提前致谢!

if req.method == 'POST':
    try:
        u_form = UserInfoForm(req.POST)
        if not u_form.is_valid():
            return err_page(_('Error'))

        u = coffeeuser.CoffeeUser.all().filter('user =', user_info).get()
        u.nickname = user_info.nickname()
        u.realname = req.POST.get('real_name')
        u.phone = req.POST.get('phone')
        u.address = req.POST.get('address')
        if req.FILES.get('photo_file'):                
            file = req.FILES.get('photo_file')
            img = images.Image(file['content'])   <<<Breakpoint...Error occurs here
            img.resize(width=50, height=50)
            resized_img = img.execute_transforms(output_encoding=images.JPEG)
            u.photo_file = db.Blob(resized_img)
        u.put()
        return HttpResponseRedirect('/user/')
    except Exception, x:
        return err_page(_('Error'))

这是发生这种情况时控制台窗口的转储。我在这里看不到任何错误消息。

: 'http://localhost:8080', 'SERVER_PROTOCOL': 'HTTP/1.0', 'QUERY_STRING': '', 'CONTENT_LENGTH': '927730', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8 ;q=0.7,*;q=0.3', 'APPENGINE_RUNTIME': 'python27', 'TZ': 'UTC', 'HTTP_COOKIE': 'RememberMe=YPD/ztDwsHCs3J9cPG5c+g==; dev_appserver_login="test@example.com:False:185804764220139124118"; sessionid=2b5fc41e4c0332b1161a002ae12e616b;csrftoken=05e24dcb62093082dc1fafe66c0a6dbb', 'SERVER_NAME': 'localhost', 'REMOTE_ADDR': '127.0.0.1', 'SDK_VERSION': '1.6.5', 'PATH_TRANSLATED': 'C:\_dev\eclipse-work\gae\pydev5 \src\main.py', 'SERVER_PORT': '8080', 'CONTENT_TYPE': 'multipart/form-data;/ ;q=0.8', 'APPLICATION_ID': 'dev~quizoncloud', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8', 'AUTH_DOMAIN': 'gmail. com', '_AH_ENCODED_SCRIPT_NAME': '/user/'} 调试 2012-05-26 07:36:19,815 datastore_stub_index.py:181] 无需更新 index.yaml

4

2 回答 2

15

file不是字典,所以你不能像那样进行键查找。也许你的意思是file.content

虽然我认为该对象也没有content属性 - 请参阅UploadedFile 对象的文档。也许你的意思是file.read()

(另外,不要调用你的变量file- 这隐藏了内置file函数)。

于 2012-05-26T20:37:58.173 回答
0

我建议您在产生异常的行之前添加行 [[print 'DEBUG:>', file, type(file)]]。此错误是关于“文件”对象不是映射类型。

于 2012-05-26T15:11:18.657 回答