上传和下载

二、代码

1.上传

前置条件:

  1. 必须使用表单,而不能是超链接;
  2. 表单的method必须是POST,而不能是GET;
  3. 表单的enctype必须是multipart/form-data;
  4. 在表单中添加file表单字段,即<input type="file”…/>

jsp页面代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <form action="/u/upload" method="post" enctype="multipart/form-data">
    姓名:<input type="text" name="name"><br>
    头像:<input type="file" name="img" value=""><br>
    <input type="submit" value="提交">
  </form>
  </body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/u/work" method="post" enctype="multipart/form-data">
    图片: <input type="file" name="jpg" value=""><br>
    音频: <input type="file" name="mp3" value=""><br>
    视频: <input type="file" name="mp4" value=""><br>
    word文档: <input type="file" name="word" value=""><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

servlet代码:

package servlet;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;

@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //1.创建工厂类DiskFileItemFactory对象:
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //2.使用工厂创建解析器对象:
        ServletFileUpload fileUpload = new ServletFileUpload(factory);
        //设置文件名称编码
        fileUpload.setHeaderEncoding("utf-8");
        try {
    
    
            //3.使用解析器来解析request对象:
            List<FileItem> list = fileUpload.parseRequest(request);
            System.out.println(list.size());
            for (FileItem item : list) {
    
    
                if (item.isFormField()){
    
    //普通字段--姓名
                    String name = item.getFieldName();
                    String value = item.getString("utf-8");
                    System.out.println(name+"--"+value);//name--康熙
                }else {
    
    //文件字段--头像
                    String name = item.getName();
                    System.out.println("文件名称:"+name);//康熙.jpg
                    System.out.println("文件大小:"+item.getSize());
                    //上传操作
                        //根据工程的相对路径返回一个磁盘绝对路径
                    String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");
                    System.out.println(realPath);
                    item.write(new File(realPath,System.currentTimeMillis()+name));
                }
            }
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }
}

package work;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;

@WebServlet("/work")
public class WorkServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        DiskFileItemFactory d = new DiskFileItemFactory();
        ServletFileUpload fileUpload = new ServletFileUpload(d);
        fileUpload.setHeaderEncoding("utf-8");
        try {
    
    
            List<FileItem> list = fileUpload.parseRequest(request);
            for (FileItem item : list) {
    
    
                String name = item.getName();
                String realPath = request.getServletContext().getRealPath("/WEB-INF/upload");
                item.write(new File(realPath,System.currentTimeMillis()+name));
            }
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }
}

2.下载

jsp页面代码:

<%@ page import="java.io.File" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
  <title>展示所有的图片资源</title>
</head>
<body>
<%
  //1.获取某个文件夹下所有文件的名称,存入session中
  File file = new File("D:\\java-two-train\\out\\artifacts\\day22_filedownload_war_exploded\\WEB-INF\\upload");
  String[] imgName = file.list();
  session.setAttribute("imgNames",imgName);
%>

<ul>
  <c:forEach var="imgName" items="${sessionScope.imgNames}">
    <li>
      <a href="/d/down?name=${imgName}">
        <img src="/d/show?name=${imgName}">
      </a>
    </li>
  </c:forEach>
</ul>
</body>
</html>

servlet代码:

package com;

import org.apache.commons.io.IOUtils;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;

@WebServlet("/down")
public class ImgDownServlet extends HttpServlet {
    
    

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //获取图片名称参数
        String imgName = request.getParameter("name");
        FileInputStream is = new FileInputStream("D:\\java-two-train\\out\\artifacts\\day22_filedownload_war_exploded\\WEB-INF\\upload\\"+imgName);
        //response响应
        //响应头:告诉浏览器以附件的形式展示文件--文件下载和文件响应的区别
        response.addHeader("content-disposition","attachment;filename="+
            new String(imgName.getBytes("gbk"),"iso8859-1"));
        ServletOutputStream os = response.getOutputStream();
        IOUtils.copy(is,os);
    }
}

package com;





import org.apache.commons.io.IOUtils;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;

@WebServlet("/show")
public class ImgShowServlet extends HttpServlet {
    
    
    //根据图片名称,响应该文件数据
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //获取图片名称参数
        String imgName = request.getParameter("name");
        FileInputStream is = new FileInputStream("D:\\java-two-train\\out\\artifacts\\day22_filedownload_war_exploded\\WEB-INF\\upload\\"+imgName);
        //response响应
        ServletOutputStream os = response.getOutputStream();
        IOUtils.copy(is,os);
    }
}

总结

以上就是上传和下载的全部代码,主要是图片、视频等文件方面的上传和下载。

猜你喜欢

转载自blog.csdn.net/StruggleBamboo/article/details/115259712