今天做了文件的上傳下載,小小總結(jié)一下,基本的web項目建立及SpringMVC框架搭建此處不詳細(xì)寫出來了。
上傳form:
form id="uploadfiles" enctype="multipart/form-data">
input type="file" multiple="multiple" id="file_upload" name="file_upload" />
input type="button" value="上傳" onclick="upload()" />
/form>
上傳Ajax:
script type="text/javascript">
/*
* 上傳文件
*/
function upload(){
var formData = new FormData($( "#uploadfiles" )[0]);
$.ajax({
type: "post",
url: "./path/upload",
dataType: "json",
data: formData,
/**
*必須false才會自動加上正確的Content-Type
*/
contentType : false,
/**
* 必須false才會避開jQuery對 formdata 的默認(rèn)處理
* XMLHttpRequest會對 formdata 進行正確的處理
*/
processData : false,
success: function(data){//從后端返回數(shù)據(jù)進行處理
if(data){
alert("上傳成功!");
}else{
alert("上傳失??!");
}
},
error: function(err) {//提交出錯
$("#msg").html(JSON.stringify(err));//打出響應(yīng)信息
alert("服務(wù)器無響應(yīng)");
}
});
}
/script>
spring.xml配置加上:
!-- 配置文件上傳 -->
bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
!-- 默認(rèn)編碼 -->
property name="defaultEncoding" value="utf-8" />
!-- 文件大小最大值 -->
property name="maxUploadSize" value="10485760000" />
!-- 內(nèi)存中的最大值 -->
property name="maxInMemorySize" value="40960" />
/bean>
controller:
/*
* 上傳多個文件
*/
@RequestMapping(value = "/upload", produces = "application/json;charset=UTF-8")
public @ResponseBody
boolean uploadFiles(@RequestParam("file_upload") MultipartFile [] files) {
boolean result = false;
String realPath;
for(int i=0;ifiles.length;i++){
if (!files[i].isEmpty()) {
String uniqueName=files[i].getOriginalFilename();//得到文件名
realPath="E:"+File.separator+uniqueName;//文件上傳的路徑這里為E盤
files[i].transferTo(new File(realPath)); // 轉(zhuǎn)存文件
result = true;
} catch (Exception e) {
e.printStackTrace();
}
}
}
return result;
}
下載的jsp頁面代碼根據(jù)需求不同自己設(shè)計,這里給出controller代碼:
/*
* 下載多個文件
*/
@RequestMapping(value = "/download")
public void downloadFiles(HttpServletResponse response) {
String str= request.getParameter("rows");//下載文件信息,包括文件名、存儲路徑等
JSONArray path=(JSONArray) JSONArray.parse(request.getParameter("rows"));
Path paths[]=new Path[path.size()];
paths = JSONArray.parseArray(str, Path.class).toArray(paths);
String uri = "d:"+ File.separator + "mldn.zip";//臨時文件存儲路徑
File zipFile = new File(uri) ; // 定義壓縮文件名稱
ZipOutputStream zipOut = null;// 聲明壓縮流對象
InputStream input = null;
//將要壓縮的文件加入到壓縮輸出流中
try {
zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
for(int i = 0;ipaths.length;i++){
File file = new File(paths[i].getUri()+File.separator+paths[i].getFilename());
try {
input = new FileInputStream(file) ;// 定義文件的輸入流
zipOut.putNextEntry(new ZipEntry(file.getName())) ; // 設(shè)置ZipEntry對象
} catch (Exception e) {
e.printStackTrace();
}
}
//將文件寫入到壓縮文件中
int temp = 0 ;
try {
while((temp=input.read())!=-1){ // 讀取內(nèi)容
zipOut.write(temp) ; // 寫到壓縮文件中
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
input.close() ;
zipOut.close() ;
} catch (IOException e) {
e.printStackTrace();
}
}
try {
// 以流的形式下載文件。
BufferedInputStream fis = new BufferedInputStream(new FileInputStream(zipFile));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/x-msdownload;");
response.setHeader("Content-Disposition", "attachment;filename=" + zipFile.getName());
toClient.write(buffer);
toClient.flush();
toClient.close();
zipFile.delete(); //將生成的服務(wù)器端文件刪除
}
catch (IOException ex) {
ex.printStackTrace();
}
}
將多個文件打成一個壓縮包下載,然后將生成的臨時壓縮文件刪除。
下載頁面如果用Ajax提交請求的話要注意:ajax函數(shù)的返回類型只有xml、text、json、html等類型,沒有“流”類型,所以我們要實現(xiàn)ajax下載,不能夠使用相應(yīng)的ajax函數(shù)進行文件下載。但可以用js生成一個form,用這個form提交參數(shù),并返回“流”類型的數(shù)據(jù)。
例子:
function download(){
var form=$("form>");//定義一個form表單
form.attr("style","display:none");
form.attr("target","");
form.attr("method","post");
form.attr("action","./path/download");//請求url
var input1=$("input>");
input1.attr("type","hidden");
input1.attr("name","rows");//設(shè)置屬性的名字
input1.attr("value",“test”);//設(shè)置屬性的值
$("body").append(form);//將表單放置在web中
form.append(input1);
form.submit();//表單提交
}
總結(jié)
以上所述是小編給大家介紹的SpringMVC+Ajax實現(xiàn)文件批量上傳和下載功能實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
您可能感興趣的文章:- MyBatis與SpringMVC相結(jié)合實現(xiàn)文件上傳、下載功能
- SpringMVC實現(xiàn)文件的上傳和下載實例代碼
- springMVC配置環(huán)境實現(xiàn)文件上傳和下載
- 在SpringMVC框架下實現(xiàn)文件的上傳和下載示例
- SpringMVC下實現(xiàn)Excel文件上傳下載
- SpringMVC框架實現(xiàn)圖片上傳與下載
- SpringMVC實現(xiàn)文件上傳和下載功能
- SpringMvc3+extjs4實現(xiàn)上傳與下載功能
- SpringMVC實現(xiàn)文件上傳和下載的工具類
- springMVC實現(xiàn)文件上傳和下載