通过HTTP API将大文件上传到Dropbox

时间:2019-07-06 18:41:06

标签: php dropbox dropbox-api

我目前正在将我的网络服务器上文件的上传机制实现到我的Dropbox应用程序目录中。

如API文档所述,有/ upload端点(https://www.dropbox.com/developers/documentation/http/documentation#files-upload)可以接受最大150MB的文件。但是,我要处理的图像和视频的最大容量为2GB。

因此,我需要使用upload_session端点。有一个端点可以启动会话(https://www.dropbox.com/developers/documentation/http/documentation#files-upload_session-start),可以添加数据并完成会话。

我目前还不清楚如何正确使用这些端点。我是否必须将服务器上的文件拆分为150MB的块(如何处理视频文件?),然后使用/ start上传第一个块,使用/ append上传下一个块,使用/ finish上传最后一个?还是可以只指定文件和API(?)来进行拆分?显然不是,但是我不知何故应该如何计算,拆分并将块存储在我的网络服务器上,而又不丢失会话之间的会话...

任何建议或其他领导链接都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

正如Greg在评论中提到的那样,您决定如何管理文件的“块”。除他的.NET示例外,Dropbox在upload example的JavaScript Dropbox API v2 JavaScript SDK中具有良好的上载会话实现。

从高层次上讲,您正在将文件拆分为较小的大小(也称为“块”),并将文件按特定顺序传递给upload_session机制。上载机制包含几个部分,需要按以下顺序使用:

  1. 致电/files/upload_session/start。在以下方法中,使用结果session_id作为参数,以便Dropbox知道您正在与哪个会话进行交互。
  2. 将文件的每个“块”增量传递到/files/upload_session/append_v2。需要注意的几件事:

    • first 调用将返回cursor,该"close": true用于以特定顺序遍历文件的块。在每次对该方法的连续调用中,它将作为参数传递(在每个响应上更新游标)。
    • 最终调用必须包含属性cursor,该属性将关闭会话,以便可以上载会话。
  3. 将最终的commit(和const winston = require('winston'); // logger configuration var logger = new winston.Logger({ transports: [ new winston.transports.Console({ level:'info', handleExceptions: false, json: false, colorize: true, prettyPrint: true }) ], exitOnError: false }); logger.info('test1',{'test':'test2'}, 'test3?'); 信息)传递到/files/upload_session/finish。如果您在响应中看到新的文件元数据,则您做到了