使用smartupload.jar实现文件上传
1.将jar包添加到项目中:smartupload.jar
2.准备上传的页面
<form action="toUpload" method="post" enctype="multipart/form-data" > 书名:<input type="text" name="bookName"/><br> 图片:<input type="file" name="自定义名称"/><br> <input type="submit" value="提交"/> </form>
注:
- (1)form标签中要添加enctype属性
- (2)提交方式必须是post
3.开始获取数据,保存文件
实例代码:
public void upload(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { //1.创建对象 SmartUpload su=new SmartUpload(); //2.获得pageContext对象并初始化 JspFactory factory=JspFactory.getDefaultFactory(); PageContext pagecontext=factory.getPageContext(this,request,response,null,false,1024,true); su.initialize(pagecontext); //3.设置编码方式 su.setCharset("utf-8"); //4.实现文件数据的上传 su.upload(); //5.保存文件 File file = su.getFiles().getFile(0); //6.得到文件的基本信息 String filename=file.getFileName(); String type=file.getContentType(); System.out.println("type="+type); //指定服务器保存文件的路径 String url="uploadfile/"+filename; //将上传文件保存到指定目录? file.saveAs(url, SmartUpload.SAVE_VIRTUAL); //是否保存成功?--->如果上传成功,则页面中显示该文件 request.setAttribute("filename",filename); //7.测试:除文件以外的内容如何获取 String uname=su.getRequest().getParameter("uname"); System.out.println("uname="+uname); //8.跳转页面 request.getRequestDispatcher("success.jsp").forward(request, response); } catch (SmartUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
注意:上传文件保存路径的文件夹不能为空,否则idea不编译。
success.jsp页面
<body> <h1>success.jsp</h1> <img src="uploadfile/${filename}"> </body>
注意:
(1)此时如果表单中有其他数据时,不能通过request直接获取,需要通过SmartUpload对象获取
String name=su.getRequest().getParameter("bookName");
并且该代码要在SmartUpload操作完成后添加
(2)解决乱码:
new String(name.getBytes("GBK"),"utf-8")
注:斜杠方向:/