我正在上传图像文件,并且需要它们使用重音字符 - 因此我已将所有内容都使用 UTF-8
。
我使用这个 JavaScript 函数来上传它们:
$('#files').change(function(e) {
var formData = new FormData();
for (var i=0; i<this.files.length;i++){
formData.append(this.files[i].name, this.files[i]);
}
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(e) {
if ( 4 == this.readyState ) {
showMessage("Uploaded.");
}
};
xhr.open('post', 'accoms/upload.jsp', true);
xhr.send(formData);
}, false);
例如,如果我有一个名为“Björk.jpg”的文件,当我查看使用 FireFox Firebug 发送到服务器的内容时,它显示为:
Content-Disposition: form-data; name="Björk.jpg"; filename="Björk.jpg"
这似乎就是服务器收到的内容。
帖子的编码显示如下:
Content-Type text/html;charset=UTF-8
当我以其他形式发送常规表单数据输入文本时,它会正确发送单词“Björk”,并且服务器会正确接收。
这是服务器端代码,以防万一:
mpp=new MultipartParser(request, 100000000);
com.oreilly.servlet.multipart.Part part;
FilePart fp=null;
String fileName="";
files=new ArrayList();
while((part=mpp.readNextPart())!=null){
if (part.isFile()){
fp=(FilePart)part;
fileName=fp.getFileName();
File file=new File(fileName);
long size=fp.writeTo(file);
files.add(file);
}
}
有什么想法吗?
谢谢。
最佳答案
解析器使用自己的编码,从 API reference 可以明显看出.
尝试:
mpp = new MultipartParser(request, 100000000);
mpp.setEncoding("UTF-8");
//rest of your code
引用文献建议将其传递到构造函数中:
mpp = new MultipartParser(request, 100000000, true, true, "UTF-8");
关于javascript - 使用 xhr 上传文件时在哪里以及如何设置正确的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15955159/