我想浏览图片&使用python将其上传到文件夹。我已经尝试了在论坛上发布的各种解决方案,但在我的案例中没有一个解决方案。请指导我需要纠正的问题。谢谢大家的快速帮助。
我收到错误
引发AttributeError(attr) AttributeError:has_key
#!/usr/bin/env python
import cgi, os
import cgitb; cgitb.enable()
import cgi
import datetime
import webapp2
import cgi, os
import cgitb; cgitb.enable()
from google.appengine.ext import ndb
from google.appengine.api import users
guestbook_key = ndb.Key('Guestbook', 'default_guestbook')
class Greeting(ndb.Model):
author = ndb.UserProperty()
content = ndb.TextProperty()
date = ndb.DateTimeProperty(auto_now_add=True)
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.out.write('<html><body>')
greetings = ndb.gql('SELECT * '
'FROM Greeting '
'WHERE ANCESTOR IS :1 '
'ORDER BY date DESC LIMIT 10',
guestbook_key)
for greeting in greetings:
if greeting.author:
self.response.out.write('<b>%s</b> wrote:' % greeting.author.nickname())
else:
self.response.out.write('An anonymous person wrote:')
self.response.out.write('<blockquote>%s</blockquote>' %
cgi.escape(greeting.content))
self.response.out.write("""
<form enctype="multipart/form-data" action="/sign" method="post">
<p>File: <input type="file" name="file1"></p>
<p><input type="submit" value="Upload"></p>
</form>
</html>""")
class Guestbook(webapp2.RequestHandler):
def post(self):
form = cgi.FieldStorage()
# A nested FieldStorage instance holds the file
#file = models.FileField(upload_to='documents/', max_length=5234,blank=True, null=True,)
# docfile = forms.FileField(label='', show_hidden_initial='none',required=True,)
fileitem = str(self.request.get('file1'))
# Test if the file was uploaded
if self.request.has_key('file1'):
# strip leading path from file name to avoid directory traversal attacks
fn = os.path.basename(fileitem.file)
open('files/' + fn, 'wb').write(fileitem.file.read())
message = 'The file "' + fn + '" was uploaded successfully'
else:
message = 'No file was uploaded'
print """\
Content-Type: text/html\n
<html><body>
<p>%s</p>
</body></html>
""" % (message,)
app = webapp2.WSGIApplication([
('/', MainPage),
('/sign', Guestbook)
], debug=True)
答案 0 :(得分:2)
您需要停在这里并返回并阅读有关appengine和python运行时的介绍性文档。如果您阅读了介绍文档,您将看到有关python运行时和沙箱的部分以及它的限制。
在检查该部分文档时,您将看到无法写入appengine中的文件系统。当你在这里时,还值得注意其他限制。
至于你的错误在代码中的哪个位置,你应该至少包含一个堆栈跟踪并查看发生错误的特定代码行,然后询问有关它的具体问题,而不是转储所有代码并说出错误你有。
目前我没有看到很多关于代码中出现has_key
错误的问题的重点,该错误是自我解释的,而您尝试做的其余部分只是赢了“无论如何都要工作。
答案 1 :(得分:2)
您的GAE Python项目文件是只读的。您只能在使用appcfg.py或push-to-deploy更新项目时更改这些文件。
但您可以使用Google cloudstorage文件夹或子目录来上传,写入或覆盖文件。 文档:https://developers.google.com/appengine/docs/python/googlecloudstorageclient/
如果您对文件夹使用appid默认存储桶,则您有5 GB的免费配额。