首先需要两个jar包:
下载commons-fileupload-1.2.2-bin.zip:
http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
下载commons-io-2.11.0-bin.zip:
http://commons.apache.org/proper/commons-io/download_io.cgi
下载好之后将两个包都放入WEB-INF目录下新建的ib文件夹中,并右键单击将其“Add As Library”。
接下来,在jsp页面中,需要一个form表单。
注意以下几点:
1. form标签,method必须为post(无长度限制)
2. form标签的enctype属性值必须为multipart/form-data。表示提交的数据以多段进行拼 接, 并且以二进制的形式发送。
3. 使用type = “file” 进行文件上传。
然后开始编写服务器接收代码,处理上传的文件。创建一个继承HttpServlet的类,并在web.xml配置。
配置如下:
在jsp页面中,设置form表单的action属性值为“http://localhost:8080/TestDemo/upload”,这里的/upload对应刚刚配置的路径。
源码如下:
upload.jsp
<form action="http://localhost:8080/TestDemo/upload" method="post" enctype="multipart/form-data"> username:<input type="text" name="name"/> <br> <%-- 使用<input type="file"/>添加文件上传--%> <input type="file" name="photo"/><br> <input type="submit"> </form>
upload.java
public class upload extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if(ServletFileUpload.isMultipartContent(req)){ //需要一个fileItemFactory实例 fileItemFactory是一个接口 因此new的是它的实现类 FileItemFactory fileItemFactory=new DiskFileItemFactory(); //创建一个用于解析上传数据的类 ServletFileUpload servletFileUpload=new ServletFileUpload(fileItemFactory); try { //解析上传的数据 得到每一个表单项FileItem List<FileItem> list=servletFileUpload.parseRequest(req); //循环判断每个表单项 for(FileItem fileItem : list){ if(fileItem.isFormField()){ //普通表单项 System.out.println("表单的name属性:"+fileItem.getFieldName()); System.out.println("表单的value属性"+fileItem.getString("UTF-8")); }else{ //上传的文件 System.out.println("表单的name属性:"+fileItem.getFieldName()); System.out.println("上传的文件名:"+fileItem.getName()); //上传的文件写入E盘 fileItem.write(new File("e:\\"+fileItem.getName())); } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } }
运行结果如下:
下载:
需要提前将要用的图片部署在项目中:
创建一个继承HttpServlet的类,重写doGet方法 :
public class download extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取下载的文件名 这里写死 String downloadFileName="1.jpg"; //读取下载的内容 ServletContext servletContext=getServletContext(); //获取要下载的文件类型 String mimeType=servletContext.getMimeType("/img/"+downloadFileName); System.out.println("下载的文件类型"+mimeType); //通过响应头告诉客户端返回的数据类型 resp.setContentType(mimeType); //告诉客户端收到的数据用于下载 如果没有这一项 图片将直接显示在页面中 resp.setHeader("Content-Disposition","attachment;filename="+downloadFileName+""); //输入流 InputStream resourceAsStream=servletContext.getResourceAsStream("/img/"+downloadFileName); //获取响应的输出流 OutputStream outputStream=resp.getOutputStream(); //将前者输入的流的内容读取,写给后者输出流 IOUtils.copy(resourceAsStream,outputStream); } }