【问题标题】:How to resumable upload with google drive node.js如何使用谷歌驱动器 node.js 恢复上传
【发布时间】:2018-08-09 20:15:09
【问题描述】:

嘿,由于 google drive 正在更改他们的库,我无法通过基本上传 drive.files.create 上传大于 5MB 的文件。文档告诉我,我必须选择可恢复的上传。但是 google drive 没有提供任何示例代码,而且我在 google 上也找不到任何东西。

知道我可以使用 drive.files.create 上传小于 5MB 的文件可能很重要

所以认证没有问题。

https://developers.google.com/drive/v3/web/resumable-upload

我写了这个 POST 请求(也不适用于 PUT):

 var fs = require('fs')
 var request = require('request')
 var file = 'C:\\test\\sample.container'
 var uploadUrl = 'https://www.googleapis.com/drive/v3/files?uploadType=resumable'


 var stats = fs.statSync(file)
 var fileSizeInBytes = stats["size"]


  fs.readFile(file, function read(e, f) {
             if (e) {
             console.log(e)
             return;
             } 




                 request.post({
                     url: uploadUrl,
                     headers: {
                         'Authorization': 'xxxxxxxxxxxxxxxxxxxxxxx',
                         'Content-Length': fileSizeInBytes,
                         'Content-Type': 'application/octet-stream'
                     },
                     body: f,
                 }, function(e, r, b) {
                     if (e) {
                      console.log(e)
                      return;
                     }

                       console.log(`
                         Response: ${ JSON.stringify(r) }
                         Body: ${ b }
                         `)

                 }); 


 }); 

但我得到了身体结果:

<HTML>
<HEAD>
<TITLE>Request Entity Too Large</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Request Entity Too Large</H1>
<H2>Error 413</H2>
</BODY>
</HTML>

如果我改为使用请求网址: https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable

我还收到一条与正文结果类似的消息: 请求过大。

那么任何人都有一个工作代码,用于通过可恢复上传或可能再次通过基本上传上传文件?或者还有其他上传大文件的方法吗?我对替代品持开放态度!谢谢

【问题讨论】:

    标签: node.js google-api google-drive-api google-api-nodejs-client


    【解决方案1】:

    在其他 api 客户端(例如 Python 客户端)中,可通过更改 MediaFileUpload constructor with the parameter resumable=True 创建可恢复上传。 node.js api 客户端仅在alpha 中,因此它可能没有内置对可恢复上传的支持。您可以尝试输入驱动器a stream,或者只是扩展该示例media 参数,例如

    media: {
      mimeType: 'some mimetype',
      body: 'some body',
      resumable: true
    }
    

    如果 stream 和上面的 resumable 不起作用,那么您将无法使用 node.js 客户端库进行可恢复上传,而必须直接使用 REST API。

    【讨论】:

    • 我尝试了可恢复的 true 选项,但没有奏效。我不明白为什么谷歌驱动器更改了他们的库。一年前,我使用基本的上传驱动器.files.create 上传千兆字节文件,现在更新我的节点模块后,我得到了这个丑陋的限制。我没有exp 与写 put 或 post 请求我以前只使用过准备好的库。如果有人可以发布示例代码,那就太好了。遗憾的是,我无法将您的 awnser 标记为正确的,因为我需要一个工作示例代码来上传请求模块或其他方式的示例。还是谢谢你!
    • 您尝试过stream 示例吗?您也可以在他们的 Github 存储库中提出问题,询问有关实施可恢复上传的问题。
    • 我编辑了我的帖子并添加了我尝试过的 put 请求。但仍然遇到请求实体太大的问题。我得到了与 drive.files.create 类似的东西。我的文件只有不到 20MB,而且我的 gdrive 存储空间中有足够的可用空间。
    • @LILBRICK1337 如果您使用上面在帖子中指定的 URL,.com/drive/v3/files,即用于标准上传。根据您提供的 API 参考链接,您需要使用 .com/upload/drive/v3/files 进行恢复上传
    • 我得到的另一个网址是正文:请求太大。
    【解决方案2】:

    问题本身与 node.js 的 googleapi 库有关。在 v27.0.0 中,基本上传也可以再次用于大文件。相关: https://github.com/google/google-api-nodejs-client/issues/1038

    这不是关于如何使用 node.js 恢复上传的答案,因此您可以保持这个主题开放,直到有人发布可恢复上传的示例代码,因为即使使用 v27,我的 POST 请求仍然无法正常工作。也许您从上面观看了 github 链接,因为我在那里也要求提供示例代码。

    但是我的问题只是我无法上传大于 5MB 的文件。但是这个问题现在对我来说已经消失了:)!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多