Python GAE组合requestHandler和BlobstoreUploadHandler的问题

时间:2014-01-15 15:18:30

标签: python google-app-engine blob handlers

<form action="/fileupload" enctype="multipart/form-data" method="post">
  <label>Title<input name="name"></label>
  <label>Author<input name="author"></label>
  <label>Year <input name="year"></label>
  <label>Link <input name="link"></label>
  <input type="file" name="file">
  <input type="submit">
</form>

问题是为什么self.get_uploads()self.request.get('file')工作时(或我建议它有效)时不返回任何内容

class FileUploadHandler(H.Handler,blobstore_handlers.BlobstoreUploadHandler):
def post(self):
    name=self.request.get('name')
    if name:
        logging.error(name)
    author=self.request.get('author')
    if author:
        logging.error(author)
    year  =self.request.get('year')
    if year and year.isdigit():
        year=int(year)
    f  =self.get_uploads('file')#FILE NOT FOUND
    #f=self.request.get('file') # WORKS FINE

    if not f:
        logging.error("FILE NOT FOUND")
    self.redirect("/files")

我查看了sample app,但他们也使用了self.request.get('file')

答案是你应该为blob创建上传网址。

2 个答案:

答案 0 :(得分:1)

您需要get_uploads()[0]或姓名。

上传处理程序的简单示例(比较并在代码中进行适当的更改):

  <form name="myform" action="{{ upload_url }}" method="post" enctype="multipart/form-data">
            <h1>Select an Image</h1>
            <input name="file" type="file"><br>
            <input type="submit" value="Upload">
  </form>

处理程序:

class UploadBlobsHandler(blobstore_handlers.BlobstoreUploadHandler):

    def post(self):
        try:
            upload = self.get_uploads()[0]
            logging.info(upload)
            url = images.get_serving_url(upload)
            # Do something with it.
        except:
            self.redirect('/uploadform/?error', abort=True)

        self.redirect('/uploadform/?success&image_url=' + url)

如何使用blobstorrhandlers上传的示例:gae-image-upload-example

答案 1 :(得分:1)

这是我问题的完整解决方案:

 <form action="{{upload_url}}" enctype="multipart/form-data" method="post">
    <label>Title<input name="name"></label>
    <label>Author<input name="author"></label>
    <label>Year <input name="year"></label>
    <label>Link <input name="link"></label>
    <input type="file" name="file">
    <input type="submit">
</form> 

其中upload_url =blobstore.create_upload_url('/fileupload',max_bytes_per_blob=10*1000*1000) 并且接下来要处理请求的代码:

upload=self.get_uploads('file')[0]