2015-07-28 65 views
1

我想上傳一個文件(字節)到服務器。有沒有辦法將這個從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

回答

2

不知道試過這是否會滿足您的需求,但我假設你只需要使用一個角上傳文件。直到我找到一個叫做ng-file-upload的小指令時,我自己遇到了問題。使用起來很簡單,包括甚至爲舊版瀏覽器提供回退。

希望可以幫到:)

+0

我的服務器接受文件爲字節...我不需要先將它轉換成先發送到服務器之前? – aye26

+0

您應該在原始文章中指定您的服務器環境和後端語言,特別是因爲其他人在說它太寬泛。 – TheAssailant

+0

我也編輯了我的問題 – aye26

2

我同意,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); 
} 

*對不起,我的名聲不夠高張貼鏈接到所有這些,但你可以谷歌他們,它應該是第一個結果

相關問題