前端页面
这里只做了一个简单按钮和表格
<script>
function finPdf(){
window.open("devDoc.do?storeName=test.pdf",
"_self",
"top=200,left=200,height=600,width=800,status=yes,toolbar=1,menubar=no,location=no,scrollbars=yes");
}
</script>
<a href="javascript:void(0);" onclick="finPdf()">点击预览pdf</a>
<form method="post" action="upload.do" enctype="multipart/form-data">
上传文件:<input type="file" name="file"><br>
<input type="submit" value="提交">
</form>
${msg}
后端页面
Spring中配置文件上传解析器
<!--SpringConfig.xml-->
<!-- 配置文件操作相关对象-->
<bean name="diskFileItemFactory" class="org.apache.commons.fileupload.disk.DiskFileItemFactory">
</bean>
<bean name="fileUploader" class="org.apache.commons.fileupload.servlet.ServletFileUpload">
<property name="fileItemFactory" ref="diskFileItemFactory"/>
<property name="headerEncoding" value="UTF-8"/>
</bean>
预览文件
@RequestMapping("devDoc.do")
public void devDoc(HttpServletRequest request, HttpServletResponse response, HttpSession session, String storeName) throws Exception {
request.setCharacterEncoding("UTF-8");
/**
* 拼接预览文件目录;
* session.getServletContext().getRealPath()返回Web模块编译输出目录,后追加参数里的内容
* 这里我们把文件保存在Web模块编译目录下的file文件夹
*/
String filePath = session.getServletContext().getRealPath("/file/" + storeName);
//判断预览文件是否存在,不存在返回错误信息
File file=new File(filePath);
if (!file.exists()){
request.setAttribute("msg","<font color='red'>预览文件未找到</font>");
request.getRequestDispatcher("preview.jsp").forward(request,response);
}
//设置页面显示模式为pdf
response.setContentType("application/pdf");
//分别创建文件输入输出流
FileInputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();
byte[] b = new byte[1024];
//输入流读入,输出流输出到页面
while ((in.read(b))!=-1) {
out.write(b);
}
out.flush();
in.close();
out.close();
}
上传文件
//文件上传解析器
@Autowired
ServletFileUpload uploader;
@RequestMapping("upload.do")
public void upload(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws Exception {
//获取文件保存路径
String savePath=session.getServletContext().getRealPath("/file");
//解析提交的数据,返回一个FileItem的集合,每个FileItem对应一个form表单的输入项
List<FileItem> list = uploader.parseRequest(request);
for(FileItem item:list){
if(item.isFormField()){//如果是普通输入的数据
String name = item.getName();
String value = item.getString("UTF-8");
System.out.println(name+"="+value);
}
else {//如果是文件类型数据
String fileName=item.getName();
//注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
//处理获取到的上传文件的文件名的路径部分,只保留文件名部分
fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
System.out.println(fileName);
InputStream in=item.getInputStream();
FileOutputStream out=new FileOutputStream(savePath+"\\"+fileName);
byte b[] =new byte[1024];
while (in.read(b)!=-1){
out.write(b);
}
in.close();
out.close();
item.delete();
}
}
String msg="<font color='green'>上传成功</font>";
request.setAttribute("msg",msg);
request.getRequestDispatcher("preview.jsp").forward(request,response);
}