【问题标题】:how to store an image on Google Cloud Storage sent by Android using Python如何将图像存储在 Android 使用 Python 发送的 Google Cloud Storage 上
【发布时间】:2014-06-06 11:19:35
【问题描述】:

我想做以下事情:

  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***

然后我使用新 URL 执行 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

【问题讨论】:

    标签: android python google-app-engine google-cloud-storage app-engine-ndb


    【解决方案1】:

    我在这里找到了部分答案:Using the Blobstore API with Google Cloud Storage

    我需要专门将图像创建到 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)
    

    【讨论】:

      【解决方案2】:

      也许上传的 url 已经过期了?它仅在几分钟内有效。

      另请参阅: google app engine; upload to blobstore gives 404 error

      【讨论】:

      • 情况并非如此,因为我立即执行 POST
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 2020-01-17
      • 2016-11-09
      • 1970-01-01
      相关资源
      最近更新 更多