我在使用角度文件上传文件名时遇到问题。
示例:上传文件žžž.txt
。结果:žžž.txt
Relevent Html表单部分:
<form id="fileupload"
action="/filestore/services/process/upload"
method="POST"
enctype="multipart/form-data"
data-ng-app="MyApp"
data-ng-controller="DemoFileUploadController"
data-file-upload="options"
<input type="file" name="files[]" multiple ng-disabled="disabled" file-change="uploadFile($event, files)">
文件控制器:
$scope.uploadFile = function($event, files) {
var file = files[0];
var data = new FormData();
console.log(file);
console.log(data);
data.append('file-0', file);
$.ajax({
url: uploadUrl,
data: data,
cache: false,
contentType: false,
processData: false,
type: 'post',
success: function(data) {
$scope.reload();
}
});
};
文件对象(由console.log(文件)打印):
lastModified 1467975647307
lastModifiedDate Date {Fri Jul 08 2016 14:00:47 GMT+0300 (FLE Standard Time)}
name "žžž.txt"
size 7
type "text/plain"
发布请求数据正文:
Source
-----------------------------2159279631001
Content-Disposition: form-data; name="file-0"; filename="žžž.txt"
Content-Type: text/plain
-----------------------------2159279631001--
从数据/代码中可以看出,FormData正在形成文件名不正确的数据对象,而File对象本身是正确的...任何想法为什么会这样?我该怎么解决这个问题?
编辑:
请求标题:
Content-Type multipart/form-data; boundary=---------------------------9275749615024
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0
X-Requested-Wit XMLHttpRequest
回复标题:
Content-Length 337
Content-Type application/json;charset=UTF-8
Server Apache-Coyote/1.1
答案 0 :(得分:0)
您应该在ajax请求中设置contentType和encoding。
$.ajax({
url: uploadUrl,
data: data,
cache: false,
contentType: "application/x-www-form-urlencoded;charset=UTF-8",
processData: false,
type: 'post',
success: function(data) {
$scope.reload();
}
});
请注意,您应该更改字符集 对于您正在使用的特定字符集,其中包含ž
此外,如果您使用的是后端。确保它也使用正确的字符编码
UTF-8应该这样做