我正在尝试将文件(字节)上传到服务器。有没有办法从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'}
})
}
}]);
答案 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);
}
*对不起,我的声誉不够高,无法发布所有这些链接,但你可以谷歌它们,它应该是第一个结果