java - 将照片上传到 Google Photos API 不返回上传 token

标签 java http google-photos google-photos-api

我正在使用 2018 版的 Google Photos API 上传图片和媒体,如下所述:“Uploading Bytes

当我上传图片或视频时,我从未在响应正文中获得上传 token 。它总是一个空体,根据上面的链接,这意味着字节已经上传(但这是一个新的上传)。

这是一个请求/响应示例:

request: 
    POST https://photoslibrary.googleapis.com/v1/uploads
request headers: 
    authorization: Bearer abcd1234
    X-Goog-Upload-Protocol: raw
    X-Goog-Upload-File-Name: 20140317T082917_001.jpg
    content-type: application/octet-stream
    content-length: 1292868
    accept: application/json
-----------------------------------------------------
response: OK [200]
response headers:
    Alt-Svc: [quic=":443"; ma=2592000; v="44,43,39,35"]
    Server: [UploadServer]
    X-GUploader-UploadID: [AEnB2UqT6y8KyZNCPyAaFeCj7I_ABIlwLJQMpltYzQ7D8blW4v3uKSlMT7dbNjFV0i_7ApzoR-i26ZtZ9kHkB7bI8n8ojgOnNA]
    Content-Length: [510]
    Date: [Sun, 05 Aug 2018 11:19:15 GMT]
    Content-Type: [text/plain]
response body:
    null

我也尝试过使用 X-GUploader-UploadID header 中返回的值,但这会导致 500 错误。

有人可以提供一个如何将字节上传到 Google Photos API 的工作示例吗?

谢谢!

最佳答案

我认为您只是没有查看 Response 内容。以下内容适用于 Python,当然您也可以让它适用于 Java:

def upload_files(self, filepath, album_id):
    filename = os.path.basename(filepath)
    url = 'https://photoslibrary.googleapis.com/v1/uploads'
    authorization = 'Bearer ' + creds.access_token

    headers = {
        "Authorization": authorization,
        'Content-type': 'application/octet-stream',
        'X-Goog-Upload-File-Name': filename,
        'X-Goog-Upload-Protocol': 'raw',
    }
    with open(filepath, "rb") as image_file:
        response = requests.post(url, headers=headers, data=image_file)
        assert response.status_code == 200
        token = response.text  # !!!
    return service.mediaItems().batchCreate(body=dict(
        albumId=album_id,
        newMediaItems=[
            {"simpleMediaItem": {"uploadToken": token}}]
    )).execute()

关于java - 将照片上传到 Google Photos API 不返回上传 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51693987/

相关文章:

java - 检查 Tomcat 版本

google-places-api - 如何从 Google Places API 获取城市景点图片

ruby-on-rails - 743 : unexpected token at '‹' happens using picasa gem in ruby on rails

python - 自动将照片上传到特定的 Google 相册相册

java - java类名中的$前缀是什么意思?

javascript - 将 javascript 变量发送到 spring Controller

java - 分布式 session 对发展的影响

html - 从 xmlhttp 抓取数据

java - Feign Client 不解析 Query 参数

c++ - 使用套接字发送文件