-
1.jsp页面基本上传为
<form action="/file/upload" enctype="multipart/form-data" method="post">
<input type="file" name="file" width="120px">
<button type="submit">上传<tton>
</form>
-
2.上传到controller处理
public String upload(MultipartFile file, HttpServletRequest request) throws IOException {
// String path = request.getSession().getServletContext().getRealPath("/upload");
String path = "D:/apache-tomcat-7.0.85/webapps/upload";
String fileName = file.getOriginalFilename();
FileInfo fileInfo = new FileInfo();
fileInfo.setFileName(fileName);
String filePath = path+"/"+fileName;
fileInfo.setFileUrl(filePath);
fileService.fileUpload(fileInfo);//文件信息保存到数据库
File dir = new File(path,fileName);
if(!dir.exists()){
dir.mkdirs();
}
file.transferTo(dir);
return "list";
//其中path为指定上传路径,上传到哪里,filename为上传文件名字
-
jsp页面前台显示图片
<img src="${pageContext.request.contextPath}/fileviewImage?path=${files.fileUrl}">
//filepath为文件绝对路径,获取绝对路径图片必须以流的方式运行然后到controller处理
@RequestMapping("viewImage")
public void find(String path,OutputStream outputStream){
try {
StreamUtils.copy(new FileInputStream(path),outputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
其中streamUtils为自动配好的
前台下载页面
<table> <tr><td>名称</td> <td>位置</td></tr> <c:forEach items="${file}" var="files"> <tr> <td>${files.fileName}</td> <td> <a href="/file/download?path=${files.fileUrl}&filename=${files.fileName}">下载</a> </td></tr> </c:forEach> </table>
controllor处理下载请求
@RequestMapping("/download") public void download(String path,String filename, HttpServletRequest request, HttpServletResponse response) throws Exception { // path为文件所在地址加文件名 //转码,免得文件名中文乱码,保证能找到文件具体位置特别是中文文件,还有下载中文文件时保证文件名不会乱码 path= new String(path.getBytes("ISO-8859-1"), "utf-8"); filename= new String(filename.getBytes("ISO-8859-1"), "utf-8"); //得到要下载的文件 File file = new File(path); if (!file.exists()) { response.setContentType("text/html; charset=UTF-8");//注意text/html,和application/html response.getWriter().print("<html><body><script type='text/javascript'>alert('您要下载的资源已被删除!');</script></body></html>"); response.getWriter().close(); System.out.println("您要下载的资源已被删除!!"); return; } //转码,免得文件名中文乱码 //filename = URLEncoder.encode(filename, "UTF-8"); //设置文件下载头 response.addHeader("Content-Disposition", "attachment;filename=" + filename); //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型 response.setContentType("multipart/form-data"); // 读取要下载的文件,保存到文件输入流 FileInputStream in = new FileInputStream(path); // 创建输出流 OutputStream out = response.getOutputStream(); // 创建缓冲区 byte buffer[] = new byte[1024]; // 缓冲区的大小设置是个迷 我也没搞明白 int len = 0; //循环将输入流中的内容读取到缓冲区当中 while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } //关闭文件输入流 in.close(); // 关闭输出流 out.close(); }