繁体   English   中英

如何使用Python在Android发送的Google Cloud Storage上存储图像

[英]how to store an image on Google Cloud Storage sent by Android using Python

我要执行以下操作:

  1. 使用cURL并将图像上传到Blobstore或Google Cloud Storage。 但是,会话不会保留在两个cURL调用之间 (我的猜测)

AppEngine需要生成一个我可以用来存储图像的URI(我的猜测)

curl -i http://localhost:8082/upload_form

执行的代码是

class PhotoUploadFormHandler(webapp2.RequestHandler):
    def get(self):
        upload_url = blobstore.create_upload_url('/upload_photo')
        # The method must be "POST" and enctype must be set to "multipart/form-data".
        self.response.out.write('***' + upload_url + '***')

application = webapp2.WSGIApplication([('/upload_form', PhotoUploadFormHandler),], debug=True)

输出如下:

HTTP/1.1 200 OK
content-type: text/html; charset=utf-8
cache-control: no-cache
Content-Length: 115
Server: Development/2.0
Date: Fri, 06 Jun 2014 08:52:17 GMT

***http://localhost:8082/_ah/upload/ahNkZXZ-ZXZlbnRzcHVsc2UtZGV2ciILEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YgICAgIDYtQoM***

然后,我使用新网址执行cURL:

curl -v -H 'Content-Type: multipart/form-data' -F "file=@./photofeed.png" http://localhost:8082/_ah/upload/ahNkZXZ-ZXZlbnRzcHVsc2UtZGV2ciILEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YgICAgIDovQoM

这是命令的输出:

* Adding handle: conn: 0x7fcb65021000
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7fcb65021000) send_pipe: 1, recv_pipe: 0
* About to connect() to localhost port 8082 (#0)
*   Trying ::1...
* Connected to localhost (::1) port 8082 (#0)
> POST /_ah/upload/ahNkZXZ-ZXZlbnRzcHVsc2UtZGV2ciILEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YgICAgIDovQoM HTTP/1.1
> User-Agent: curl/7.30.0
> Host: localhost:8082
> Accept: */*
> Content-Length: 2999
> Expect: 100-continue
> Content-Type: multipart/form-data; boundary=----------------------------76b075a1768d
> 
< HTTP/1.1 100 Continue
< HTTP/1.1 404 Not Found
< Content-Length: 254
< Content-Type: text/html; charset=UTF-8
* Server Development/2.0 is not blacklisted
< Server: Development/2.0
< Date: Fri, 06 Jun 2014 08:54:38 GMT
* HTTP error before end of send, stop sending
< 
<html>
 <head>
  <title>404 Not Found</title>
 </head>
 <body>
  <h1>404 Not Found</h1>
  The resource could not be found.<br /><br />
No such upload session: ahNkZXZ-ZXZlbnRzcHVsc2UtZGV2ciILEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YgICAgIDovQoM


 </body>
* Closing connection 0

我在这里找到了部分答案: 在Google Cloud Storage中使用Blobstore API

我需要将图像专门创建到Google Cloud Storage中,并且已经将CreateFile方法更改为CreateImage方法

def CreateImage(imageName, imageData): 
    """Create a GCS file with GCS client lib.

    Args:
      filename: GCS filename.

    Returns:
      The corresponding string blobkey for this GCS file.
    """
    # Create a GCS file with GCS client.
    with gcs.open(imageName, 'w') as f:
        f.write(imageData)

    # Blobstore API requires extra /gs to distinguish against blobstore files.
    blobstore_filename = '/gs' + imageName
    # This blob_key works with blobstore APIs that do not expect a
    # corresponding BlobInfo in datastore.
    return blobstore.create_gs_key(blobstore_filename)

上载网址可能已过期? 只能使用几分钟。

另请参阅: 谷歌应用引擎; 上载到blobstore会显示404错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM