首页 > 解决方案 > 无法识别 js 中 Google Drive 上的图片上传

问题描述

我正在尝试使用 oauth 令牌和获取 url 在谷歌驱动器上上传图像文件。 https://developers.google.com/drive/api/v3/manage-uploads 执行分段上传,HTTP。当我尝试上传时,获取 url 响应返回状态 200,并且在谷歌驱动器中,文件在那里。但是看不到(识别不支持img)。

这是我的标题

method: post 
Authorization: `Bearer ${token}`
Content-Type: `multipart/related; boundary=${boundaryString}`
Content-Length: ${body.Length}

这是我的身体

--`${boundaryString}`
Content-Type: application/json; charset=UTF-8

{"name":"myimage.png","description":"Upload image","mimeType":"image/png"}

--`${boundaryString}`
Content-Type: image/png; Content-Transfer-Encoding: base64

data:image/png;base64,iVBO......TkSuQmCC
--`${boundaryString}`--

回复 :

status: 200 url: "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"
body: {
  id: "~~~~"
  kind: "drive#file"
  mimeType: "image/png"
  name: "myimage.png"

当我开车时,它存在。它的详细信息收集(名称,描述,mimeType),但无法像其他图像一样识别。(不支持文件格式。)当我检查 <img src ="data:image/png;base64,iVBO......TkSuQmC" />它是否有效时。能告诉我有什么问题吗?

标签: javascripthttpfile-uploadencodinggoogle-drive-api

解决方案


这个改装怎么样?

修改点:

  • Content-Type: image/png;从数据部分中删除。
  • 请删除 base64 数据的标头。

当以上几点反映到您的请求正文中时,它变为如下。

修改后的请求正文:

--`${boundaryString}`
Content-Type: application/json; charset=UTF-8

{"name":"myimage.png","description":"Upload image","mimeType":"image/png"}

--`${boundaryString}`
Content-Transfer-Encoding: base64

iVBO......TkSuQmCC
--`${boundaryString}`--

笔记:

  • 在这种情况下,换行符很重要。请注意这一点。

  • 在此修改中,假设您的访问令牌可用于将文件上传到 Google Drive。

  • 虽然我不确定您的实际脚本,但如果您使用 Javascript,那么以下修改后的脚本怎么样?

        var data = `--${boundaryString}
      Content-Type: application/json; charset=UTF-8
    
      {"name":"myimage.png","description":"Upload image","mimeType":"image/png"}
    
      --${boundaryString}
      Content-Transfer-Encoding: base64
    
      iVBO......TkSuQmCC
      --${boundaryString}--`;
    

推荐阅读