我正在尝试使用 ajax 请求将包含多个文件的 zip 从客户端发送到服务器。zip 在 javascript 中编码为 Base64 字符串并作为 post 参数传递
Javascript代码:
var fileUp = document.getElementById("wsFile");
var file = fileUp.files[0];
var array = new Array();
array = file.name.split(".");
var reader = new FileReader();
reader.readAsDataURL(file);
if(array[array.length-1]=="zip" && file.size<=10000000){
var xhr = new XMLHttpRequest();
xhr.open("POST", "X",true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 && xhr.status == 200) {
dojo.byId("content").innerHTML=xhr.responseText;
}
}
reader.onload = function(){
var params = "file="+ reader.result+"&fileName="+file.name;
xhr.send(params);
};
}
服务器端(Spring MVC):
@RequestMapping(value = "/X", method = RequestMethod.POST)
public String X(@RequestParam("file") String file, @RequestParam("fileName") String fileName, Locale locale, Model model) {
System.out.println(file);
byte[] decoded = Base64.decodeBase64(file);
System.out.println(decoded);
File folder = new File("C:\\MTT");
if(!folder.exists()){
folder.mkdir();
}
File f = new File("C:\\MTT\\"+fileName);
try {
FileOutputStream fos = new FileOutputStream(f);
fos.write(decoded);
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
到目前为止一切顺利,ajax 请求成功,服务器接收到与客户端发送的相同的 Base64 字符串。但是,当我尝试提取 zip 中的文件时,我收到一条损坏的存档消息。
我做错了什么还是这是 zip 档案的限制?对不起任何天真,但我以前从未这样做过