代码之家  ›  专栏  ›  技术社区  ›  Nikhil

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

  •  1
  • Nikhil  · 技术社区  · 7 年前

    有没有人能够使用Dropbox的Javascript SDK将文件上传到Dropbox (Link to Dropbox javascript SDK) 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)?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Nikhil    5 年前

    要读取文件的内容,请使用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?