SpringMVC__簡單文件上傳與下載


一、文件上傳
1、要用的基本兩個包:

2、簡單的表單:

<form action="/SpringDemo08/upLoad" method="post" enctype="multipart/form-data">
		賬號:<input type="text" name="userName"><br>
		頭像:<input type="file" name="file"><br>
		<input type="submit" value="提交">
	</form>

這里重點是:
method="post"
enctype="multipart/form-data"

必須是post方式提交,也必須設置enctype為
multipart/form-data,

controller

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class UploadFile {
	/**
	 * 文件上傳
	 * @param file
	 * @return
	 * @throws IllegalStateException
	 * @throws IOException
	 */
	@RequestMapping("/upLoad")
	@ResponseBody
	public String upLoad(MultipartFile file) throws IllegalStateException, IOException {
		// TODO Auto-generated method stub
		// getOriginalFilename()獲取原始文件名(在客戶端時的文件名)
		//getFileName() 在服務器上的文件名.
		String filename = file.getOriginalFilename();
		File file2 = new File("D:/imgs/"+filename);
		//這里你可以進行重命名也可以把路徑入庫
     //這里我就不做其他業務操作了

		//MultipartFile中的transferTo不能使用兩次
		//因為http post文件流只可以接收讀取一次,傳輸完畢則關閉流。
		//可以把流保存為文件1,然后對文件1進行復制,移動等操作
		//transferTo轉存文件到指定路徑
		file.transferTo(file2);
		return "上傳成功";
	}
}

applicationContext.xml配置:

<!-- 配置文件上傳的處理器 -->
	<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
		<property name="maxUploadSize" value="5242880"/>
	</bean>

CommonsMultipartResolver這個Bean的id必須為multipartResolver,
原因:CommonsMultipartResolver Bean是在中央控制器DispatcherServlet中加載的,而DispatcherServlet是通過名字來查找這個Bean的。而其他的,則是按照類型查找。

二、文件下載

  1. 方式一:基於ResponseEntity實現
@RequestMapping("/download ")
public ResponseEntity<byte[]> download(HttpServletRequest request) throws IOException {
    // 需要下載的文件
	File file = new File("C:\\Users\\Administrator\\Pictures\\Saved Pictures\\2.jpg");
    byte[] body = null;
    InputStream is = new FileInputStream(file);
    body = new byte[is.available()];
    is.read(body);
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Disposition", "attchement;filename=" + file.getName());
    HttpStatus statusCode = HttpStatus.OK;
    ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);
    return entity;
}
  1. 方式二:通用下載實現
/**
	 * 文件下載
	 * @param req
	 * @param resp
	 * @throws IOException
	 */
	@RequestMapping("/downLoad")
	@SuppressWarnings("resource")
	public void downLoad(HttpServletRequest req,HttpServletResponse resp) throws IOException {
		// TODO Auto-generated method stub
		File file = new File("C:\\Users\\Administrator\\Pictures\\Saved Pictures\\2.jpg");
		req.setCharacterEncoding("utf-8");
		resp.setContentType("multipart/form-data");
	    resp.setHeader("Content-Disposition", "attachment;fileName="+file.getName() );
	    FileInputStream inputStream = new FileInputStream(file);
	    ServletOutputStream outputStream = resp.getOutputStream();
	    int num = 0;
	    byte[] b = new byte[1024]; 
	    while ((num = inputStream.read(b)) != -1) {
	    	outputStream.write(b, 0, num);
		}
	    outputStream.flush();
	    outputStream.close();
	    inputStream.close();
	}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM