2015-06-22 33 views
0

我想从我的应用程序上传图像到服务器,我想使用ngCordova文件传输插件,但我不满意这个插件给你的进度信息,所以我决定使用Flowjs,但我无法设法从我拥有的文件url中创建一个合适的HTML5 File对象。 这是我的代码Flowjs文件上传 - Ionic和ngCordova

window.resolveLocalFileSystemURL(photo, function(fileEntry){ 
    fileEntry.file(function(file){ 
     $scope.flow.addFile(file); 
     $scope.flow.upload(); 
     $scope.flow.on('fileProgress', function (file, chunk){ 
      console.log(file); 
      console.log(chunk); 
     }); 
     $scope.flow.on('error', function(a,b){ 
      console.log(a); 
      console.log(b); 
     }); 
    }); 
    }, function(err){ 
     console.log(err); 
}); 

如果照片是路径文件系统的文件。 当我尝试做这种上传时,我得到一个400(错误的请求)错误,我确定服务器端是正确的,因为我用它与许多其他Flowjs应用程序。 我认为fileEntry.file()返回的对象不是一个合适的HTML5文件对象,也许从文件url创建一个Blob可以解决问题,但我不知道如何创建它。 我想让我的代码工作,虽然之前尝试创建一个Blob,但如果这是唯一的解决方案,以及...

回答

0

好吧,我找到了一个解决方案的作品,不知道,如果它是最好的可能性,任何改进都非常感谢。

window.resolveLocalFileSystemURL(photo, function(fileEntry){ 
    fileEntry.file(function(file){ 
     var reader = new FileReader(); 
     reader.onload = function(){ 
      var blob = new Blob([reader.result], {type: 'application/octet-stream'}); 
      blob.name = 'image.jpg'; 
      $scope.flow.addFile(blob); 
      $scope.flow.upload(); 
      $scope.flow.on('fileProgress', function (file, chunk){ 
       console.log(file); 
       console.log(chunk); 
      }); 
      $scope.flow.on('error', function(a,b){ 
       console.log(a); 
       console.log(b); 
      }); 
     }; 
     reader.readAsArrayBuffer(file); 
    }); 
}, function(err){ 
    console.log(err); 
});