ssm上传下载预览文件
时间: 2023-10-11 08:07:12 浏览: 102
ssm之文件下载
实现SSM的文件上传、下载和预览可以分为以下几个步骤:
1. 上传文件
在SpringMVC中,可以使用MultipartResolver来解析上传的文件。在配置文件中添加以下配置:
```
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
```
其中maxUploadSize表示最大上传文件大小,defaultEncoding表示文件编码。
在Controller中添加以下代码:
```
@RequestMapping(value="/upload", method=RequestMethod.POST)
public String upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
String fileName = file.getOriginalFilename();
String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/";
File dest = new File(filePath + fileName);
try {
file.transferTo(dest);
return "success";
} catch (IOException e) {
e.printStackTrace();
return "error";
}
}
```
其中file是前端传递的文件参数,HttpServletRequest用于获取项目根路径,将文件保存到指定目录中。
2. 下载文件
在Controller中添加以下代码:
```
@RequestMapping(value="/download", method=RequestMethod.GET)
public ResponseEntity<byte[]> download(HttpServletRequest request, @RequestParam("fileName") String fileName) throws Exception {
String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/";
File file = new File(filePath + fileName);
HttpHeaders headers = new HttpHeaders();
headers.setContentDispositionFormData("attachment", new String(fileName.getBytes("UTF-8"), "ISO-8859-1"));
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}
```
其中fileName为前端传递的文件名,HttpHeaders用于设置下载的响应头,FileUtils.readFileToByteArray(file)将文件转换成字节数组返回。
3. 预览文件
实现文件预览需要根据文件类型选择不同的方式进行处理。例如,可以使用PDF.js库预览PDF文件,使用Office Online预览Office文档等。
以PDF文件为例,在Controller中添加以下代码:
```
@RequestMapping(value="/preview", method=RequestMethod.GET)
public String preview(HttpServletRequest request, @RequestParam("fileName") String fileName, Model model) throws Exception {
String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/";
File file = new File(filePath + fileName);
if (file.exists()) {
String pdfUrl = "http://localhost:8080/ssm/preview/pdfjs/web/viewer.html?file=" + request.getContextPath() + "/upload/" + fileName;
model.addAttribute("pdfUrl", pdfUrl);
return "pdfpreview";
} else {
return "error";
}
}
```
其中pdfUrl为PDF.js预览文件的URL,pdfpreview为PDF预览页面。
在PDF预览页面中,使用iframe嵌入PDF.js预览:
```
<iframe id="pdf" src="${pdfUrl}" width="100%" height="800px"></iframe>
```
需要注意的是,PDF.js需要引入相应的JS和CSS文件:
```
<script src="${pageContext.request.contextPath}/preview/pdfjs/build/pdf.js"></script>
<script src="${pageContext.request.contextPath}/preview/pdfjs/build/pdf.worker.js"></script>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/preview/pdfjs/web/viewer.css">
```
以上是基于SSM实现文件上传、下载和预览的简单示例,具体实现需要根据项目需求进行调整。
阅读全文