0
点赞
收藏
分享

微信扫一扫

文件的上传下载

橙子好吃吗 2022-04-17 阅读 140

文章目录


一、前提准备

1. 添加jspSmartUpload.jar

这个jar包在maven repository 仓库里是找不到,需要自己从本地添加。你需要在WEB-INF下创建lib文件夹,然后把jar包复制到lib文件夹下。之后再在pom.xml下添加如下依赖:

 <!--文件上传下载的依赖-->
        <dependency>
            <groupId>jspSmartUpload</groupId>
            <artifactId>jspSmartUpload</artifactId>
            <version>1.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/jspSmartUpload.jar</systemPath>
        </dependency>

在网上查的其他人上传下载用的是SmartUpload.jar,但配置是一样的,我猜应该只是文件名字不同。

二、上传下载的实现

1. Register.jsp

这里需要注意的是文件上传下载是表单需要 enctype="multipart/form-data"

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set value="${pageContext.request.contextPath}" var="path"></c:set>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <div>
        <label>用户名</label>
        <input type="text" name="uname">
    </div>
    <form action="${path}/RegisterServlet" method="post" enctype="multipart/form-data">
        <div>
            <label>选择图片</label><br><br>
            <input type="file" name="img1">
            <input type="file" name="img2">
            <input type="file" name="img3">
        </div><br>
        <input type="submit" value="上传">
    </form>
</body>
</html>

2. UploadServlet

文件上传代码

package com.servlet;

import com.jspsmart.upload.File;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet(name = "RegisterServlet", value = "/RegisterServlet")
public class RegisterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        SmartUpload su = new SmartUpload();
        su.initialize(getServletConfig(), request, response);
        su.setMaxFileSize(1024 * 1024 * 5);
        su.setAllowedFilesList("jpg,gif,bmp,png");
        String path = "D:/upload";

        List<String> fileNames = new ArrayList<>();
        try {
            su.upload();
            int count = su.getFiles().getCount();
            for (int i=0; i < count; i++) {
                File file = su.getFiles().getFile(i);
                if (file.getSize() == 0) {
                    continue;
                }
                file.saveAs(path + "/" + file.getFileName());
                fileNames.add(file.getFileName());
            }
        } catch (SmartUploadException e) {
            e.printStackTrace();
        }
        System.out.println("图片上传成功!");
        request.setAttribute("fileNames", fileNames);
        request.getRequestDispatcher("Success.jsp").forward(request, response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

3. Success.jsp

访问成功后,需要显示文件的图片和文件的下载地址。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set value="${pageContext.request.contextPath}" var="path"></c:set>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <c:forEach items="${fileNames}" var="fileName">
        <img alt="${fileName}" src="D:/upload/${fileName}">
        <h1>${fileName}</h1>
        <a href="${path}/LoadServlet?fileName=${fileName}">下载图片</a>
    </c:forEach>
</body>
</html>

4. DownloadServlet

下载文件的代码

package com.servlet;

import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.sql.SQLException;

@WebServlet(name = "LoadServlet", value = "/LoadServlet")
public class LoadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String path = request.getParameter("fileName");
        SmartUpload su = new SmartUpload();
        su.initialize(getServletConfig(), request, response);
        path = "D:/upload/" + path;
        su.setContentDisposition(null);
        try {
            // 根据文件路径下载文件
            su.downloadFile(path);
        } catch (SmartUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ServletException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

总结

这个明天再完善一下。

举报

相关推荐

0 条评论