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

时间:2015-07-28 07:32:04

标签: javascript angularjs bytearray

我正在尝试将文件(字节)上传到服务器。有没有办法从ui侧转换这个,我使用角度js? 我使用的Api是用ASP.new完成的,我的sql表有字段: FileName(字符串)和文件(字节集合)。 这是我到目前为止所尝试的

 $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'}
        })
    }
}]);

2 个答案:

答案 0 :(得分:2)

不确定这是否符合您的需求,但我假设您只需要使用Angular上传的文件。我自己遇到了问题,直到找到一个名为http://msdn.microsoft.com/en-/library/z54t9z5f.aspx的小指令。非常简单易用,包括甚至为旧浏览器提供后备。

希望有所帮助:)

答案 1 :(得分: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);
}

*对不起,我的声誉不够高,无法发布所有这些链接,但你可以谷歌它们,它应该是第一个结果