创建一个文件上传表单:
1、表单类型为 enctype="multipart/form-data
2、表单提交方式为post
3、表单元素要有name属性值
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="file1"> <input type="file" name="file2"> <input type="submit"> </form> </body> </html>
编写后台 Servlet ,在这之前我们先确保依赖包已经引入到项目的 WEB-INF/lib 目录下,
你可以去下载依赖包:jsmartcom_zh_CN.jar
UploadServlet代码(此以上传多个文件为例)
//设置进行访问的servlet文件名,form表单action属性即可设置为在后端服务器上处理文件上传的 Servlet 名文件 @WebServlet("/upload") public class FileUpload extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //创建文件对象 SmartUpload up=new SmartUpload(); //初始化文件(将文件保管到文件对象中) up.initialize(getServletConfig(),req,resp); try { //获取上传文件 up.upload(); // 上传配置 up.setAllowedFilesList("jpg,png,gif,jpeg"); //限定上传格式,这里是设置了图片格式 up.setMaxFileSize(1024); up.setTotalMaxFileSize(1024*10); //找到文件要上传存储的路径 String path=getServletContext().getRealPath("/img"); //取出要上传的所有文件 Files files = up.getFiles(); for (int i = 0; i < files.getCount(); i++) { com.jspsmart.upload.File file = files.getFile(i);//取出要上传的每一个文件 /* 直接解决文件名的乱码问题(不推荐)*/ String fileName = file.getFileName(); //获取到取出的每个上传文件原来的文件名 fileName = new String(fileName.getBytes(),"UTF-8");//对所获取的文件名设置字符编码UTF-8 //上传文件到指定路径 file.saveAs(path+"\\"+fileName); } //重定向到表单页面上 resp.sendRedirect("index.jsp"); } catch (SmartUploadException e) { e.printStackTrace(); } } }
上面上传文件代码中是直接进行解决文件名乱码,但是一般推荐的是由系统统一重新分配唯一的文件名, 操作如下:
getFileExt()-->获取文件后缀名
String fileName = UUID.randomUUID().toString()+"."+file.getFileExt();