一、文件上傳
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的。而其他的,則是按照類型查找。
二、文件下載
- 方式一:基於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;
}
- 方式二:通用下載實現
/**
* 文件下載
* @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();
}