我想使用ajax請求將包含多個文件的zip文件從客戶端發送到服務器。 拉鍊被編碼爲Base64字符串在JavaScript和作爲後參數傳遞通過POST發送ZIP文件到Base64中的服務器
Javascript代碼:到目前爲止
@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();
}
那麼好:
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的) ,ajax請求成功並且服務器接收到客戶端發送的相同Base64字符串。 但是,當我嘗試提取zip內的文件時,出現損壞的歸檔消息。
我做錯了什麼或者這是一個zip壓縮檔案的限制? 對不起,任何天真的,但我從來沒有這樣做過
'「服務器收到客戶端發送的相同的Base64字符串」「服務器是否從_Base64_生成相同的文件?雙方通過散列確認。 –