有没有办法将角度js中的文件转换为字节?

问题描述:

我想上传一个文件(字节)到服务器。有没有办法将这个从ui端转换,我使用角js? 我使用的Api是用ASP.new完成的,我的sql表中有字段: FileName(string)和File(字节集合)。 这是我迄今有没有办法将角度js中的文件转换为字节?

$scope.upload = function(){ 
     var file = $scope.myFile; 
     var fileName=file.name; 

     Upload.uploadFile((file), uploadUrl,fileName); 
    }; 


App.service('fileUpload', ['$http', function ($http) { 
    this.uploadFile = function(File, uploadUrl,fileName){ 
     var fd = new FormData(); 
     console.log(File); //returns {} 
     fd.append('File', new Uint8Array(File)); 
     var data ={ 
    FileName : fileName, 

}; 
      fd.append("FileName", JSON.stringify(data.FileName)); 


     $http.post(uploadUrl, fd, { 
      transformRequest: angular.identity, 
      headers: {'Content-Type': 'application/json'} 
     }) 
    } 
}]); 
+0

这个问题太广泛了,与angularjs无关。但是你可能想看看File&Blob规范。 – fdreger

不知道试过这是否会满足您的需求,但我假设你只需要使用一个角上传文件。直到我找到一个叫做ng-file-upload的小指令时,我自己遇到了问题。使用起来很简单,包括甚至为旧版浏览器提供回退。

希望可以帮到:)

+0

我的服务器接受文件为字节...我不需要先将它转换成先发送到服务器之前? – aye26

+0

您应该在原始文章中指定您的服务器环境和后端语言,特别是因为其他人在说它太宽泛。 – TheAssailant

+0

我也编辑了我的问题 – aye26

我同意,ng-file-upload很不错。我也类似地发布我的文件到base64字符串作为我的json对象的“file_content”的数据库。使用从ng-file-upload(或正常的<input type="file"/>)生成的FileList *对象,我使用FileReader *对象将文件作为DataUrl读取(FileReader还有其他一些readAs方法)。

注意:我也使用LoDash *(_.last和_.split)。

uploadFile() {  
    var reader = new FileReader(); 
    reader.onload = (event) => { 
     var data = { 
      file_id: 1, 
      //strip off the first part ("data:[mime/type];base64,") and just save base64 string 
      file_content: _.last(_.split(event.target.result, ','));, 
      file_name: this.file.name, 
      mime_type: this.file.type 
     } 
     /*... POST ...*/ 
    }; 
    //this.file is my model for ng-file-upload 
    reader.readAsDataURL(this.file); 
} 

http://jsfiddle.net/eliseosoto/JHQnk/

再后来要下载的文件,我用FileSaver.js *的saveAs:

downloadFile(fileFromDB) { 
    var convertDataURIToBinary =() => { 
     var raw = window.atob(fileFromDB.file_content); 
     var rawLength = raw.length; 
     var array = new Uint8Array(new ArrayBuffer(rawLength)); 

     for (var i = 0; i < rawLength; i++) { 
      array[i] = raw.charCodeAt(i); 
     } 
     return array; 
    } 
    var bin_array = convertDataURIToBinary(); 
    saveAs(new Blob([bin_array], { type: fileFromDB.mime_type }), fileFromDB.file_name); 
} 

*对不起,我的名声不够高张贴链接到所有这些,但你可以谷歌他们,它应该是第一个结果