使用 Dropbox API V2 + Cordova 将文件上传到 Dropbox

Posted

技术标签:

【中文标题】使用 Dropbox API V2 + Cordova 将文件上传到 Dropbox【英文标题】:Uploading Files to Dropbox using Dropbox API V2 + Corodva 【发布时间】:2017-07-06 07:41:44 【问题描述】:

有没有人能够在 Cordova 应用程序中使用 Dropbox (Link to Dropbox javascript SDK) API V2 的 Javascript SDK 将文件上传到 Dropbox?我查看了 Dropbox-sdk.js 文件以了解上传文件的方法,但所有方法都需要我们要上传到保管箱 More about Upload methods here 的文件的内容。我们如何提供文件的内容? examples from the Javascript Sdk 使用输入类型文件元素来获取要上传到 Dropbox 的文件。但万一科尔多瓦怎么办呢?我们如何传递文件的内容?

下面是我将文件上传到 Dropbox 的代码,但是当我尝试打开上传的文件时,它显示没有内容的 pdf 文件。

 function uploadFile(tmpStrListStr)
    
        var tmpStrList = "";
        var uploadSuccess = false;
        tmpStrList = tmpStrListStr.substring(0, tmpStrListStr.length-1).split(",");
        istrue = true;
        for(var i = 0 ; i < tmpStrList.length; i++)
           
         var path = cordova.file.externalRootDirectory+'/Test/Logs/'+tmpStrList[i] + '.pdf';
         window.resolveLocalFileSystemURL(path, function (fileEntry) 

          fileEntry.file(function(file) 
              var reader = new FileReader();

            reader.onloadend = function(e) 

                var ACCESS_TOKEN = localStorage.accessToken;            
                var dbx = new Dropbox( accessToken: ACCESS_TOKEN );              

                var fileCommitInfo = ;
                fileCommitInfo.contents = reader.result;
                fileCommitInfo.path = '/' + fileEntry.name;
                fileCommitInfo.mode =  '.tag': 'overwrite' ;
                fileCommitInfo.autorename = true;
                fileCommitInfo.mute = true;

                dbx.filesUpload(fileCommitInfo)
                  .then(function(response) 
                      alert(response);

                  )
                  .catch(function(errr) 
                    console.log(errr);
                  );

              

              reader.readAsDataURL(file);
          );

      , function (e) 
            console.log("FileSystem Error");
            console.dir(e);
        );

       

    

有没有其他方法可以在不使用 Javascript SDK 的情况下为 Cordova 应用程序实现 Dropbox 功能(API V2)?

全世界有没有人可以告诉我如何使用 Javascript SDK V2 将文件上传到 Dropbox?

【问题讨论】:

看起来您在FilesCommitInfo 中填写了正确的参数。请问reader.result的值是多少? Reader.result 包含文件数据作为 base64 编码字符串。 它不应该是 base64 编码的,但是提供一个字符串一般来说应该没问题,所以不会得到一个空文件。您收到的是response 还是errr?请分享你得到的任何输出。 @Nikhil 如果您找到了解决方案,请在此处发布。 TIA! @Devashish 抱歉延迟回复......!我在下面添加了答案。看看.. 【参考方案1】:

使用 XMLHttpRequest 读取文件的内容。从响应中,创建了一个 blob 对象,然后将其设置为 FilesUpload 方法的内容参数。

function UploadNewFile() 

         var rawFile = new XMLHttpRequest();         
            rawFile.responseType = 'arraybuffer';
            rawFile.open("GET", "Your file Path Here", true);
            rawFile.onreadystatechange = function ()
            
                if(rawFile.readyState === 4)
                
                    if(rawFile.status === 200 || rawFile.status == 0)
                                           
                        var blobObj = new Blob([rawFile.response], type: 'application/pdf',endings: 'native' );
                        dbx = new Dropbox(accessToken: "Your Access Token");
                        if (dbx != null)                       
                            dbx.filesUpload(
                                path:'/' + "File Name Here"+ '.pdf',
                                contents: blobObj,
                                mode: 'overwrite',
                                mute: true
                            ).then(function (response) 
                                 var showmsg = "File Upload Complete";
                                 reset();
                                 alertify.alert(showmsg, function (e)
                                    
                                       if (e)
                                       
                                        //Code to be executed after your files are successfully uploaded to Dropbox.
                                       
                                   );

                                

                            ).catch(function (error) 
                                var showmsg = "Error saving file to your Dropbox!";
                                reset();    
                                     alertify.alert(showmsg);
                            );                     
                        ;

                    
                         
        
         rawFile.send(null);
    

参考:What is blob?

【讨论】:

以上是关于使用 Dropbox API V2 + Cordova 将文件上传到 Dropbox的主要内容,如果未能解决你的问题,请参考以下文章

用于循环的 dropbox V2 DBFILESmetadata 不递增

使用 Dropbox API 列出 Dropbox 的所有文件夹和文件

Dropbox.Api 无法上传大文件

Dropbox 核心 API 和同步 API

使用 REST API 的 Dropbox 差异/增量上传

Dropbox Api,获取用户历史记录