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

时间:2017-07-06 07:41:44

标签: javascript cordova dropbox-api

有没有人能够使用Cordova应用程序中的Dropbox (Link to Dropbox javascript SDK) API V2的Javascript SDK将文件上传到Dropbox?我查看了Dropbox-sdk.js文件以获取上传文件的方法,但所有方法都需要我们要上传到dropbox 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?

1 个答案:

答案 0 :(得分:1)

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

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?