美文网首页Java
servlet实现文件上传和下载

servlet实现文件上传和下载

作者: GG_lyf | 来源:发表于2020-06-09 23:28 被阅读0次

前言

        在学文件的上传和下载的时候,老师的东西用着很不舒服,于是就自己找的视频自己学,然后跟着视频敲的,时间长了,容易忘记,就当成博客发了.如果和某位老哥的很相似,请见谅.


开搞

文件上传
浏览器端要求:
post请求
input type="file"
表单的enctype="multipart/form-data"
服务器要求(fileUpload)
通过reuqest.getparameterxxx()获取的参数全部为空
使用步骤:
导入jar包


使用的jar包

创建一个磁盘文件项工厂
创建一个核心文件上传对象ServletUpLoad
上传对象调用方法解析请求获取一个List<FileItem>

tomcat发布文件的位置
D:\eclipse.2\eclipse-workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\UpAndDown

文件上传

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
    <!--表单的enctype属性要设置为multipart/form-data-->
    <form action="upload" method="post" enctype="multipart/form-data">
        <table width="600">
            <tr>
                <td>上传者</td>
                <td><input type="text" name="name" /></td>
            </tr>
            <tr>
                <td>上传文件</td>
                <td><input type="file" name="myfile" /></td>
            </tr>
            <tr>
                <!--设置单元格可横跨的列数。-->
                <td colspan="2"><input type="submit" value="上传" /></td>
            </tr>
        </table>

    </form>
</body>
</html>
package org.vector.upload;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;
import java.util.UUID;

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 org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@WebServlet(name = "UploadServlet", urlPatterns = "/upload")
public class UploadSevlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            response.setContentType("text/html;charset=utf-8");
//              创建DiskFileItemFactory工厂对象
            DiskFileItemFactory factory = new DiskFileItemFactory();
//              设置文件缓存目录,如果该文件夹不存在则创建一个
            File f = new File("F:\\TempFolder");
            if (!f.exists()) {
                f.mkdirs();
            }
            factory.setRepository(f);
//              创建ServletFileUpload对象
            ServletFileUpload fileUpload = new ServletFileUpload(factory);
//              设置字符编码
            fileUpload.setHeaderEncoding("utf-8");
//              解析request,将form表单的各个字段封装为FileItem对象
            List<FileItem> fileItems = fileUpload.parseRequest(request);
//              获取字符流
            PrintWriter writer = response.getWriter();
//              遍历List集合
            for (FileItem fileItem : fileItems) {
//              判断是否为普通字段
                if (fileItem.isFormField()) {
//                      获取字段名称
                    String name = fileItem.getFieldName();
                    if (name.equals("name")) {
//                          如果字段值不为空
                        if (!fileItem.getString().equals("")) {
                            String value = fileItem.getString("utf-8");
                            writer.print("上传者:" + value + "<br />");
                        }
                    }
                } else {
                    // 获取上传的文件名
                    String filename = fileItem.getName();
//                      处理上传文件
                    if (filename != null && filename != "") {
                        writer.print("上传的文件名称:" + filename + "<br />");
//                          保持文件名唯一
                        filename = UUID.randomUUID().toString() + "-" + filename;
                        String webpath = "/upload/";
//                          创建文件路径
                        String filepath = getServletContext().getRealPath(webpath + filename);
                        // 创建File对象
                        File file = new File(filepath);
                        // 创建文件夹
                        file.getParentFile().mkdirs();
                        // 创建文件
                        file.createNewFile();
                        // 获取上传文件流
                        InputStream in = fileItem.getInputStream();
//                          使用 FileOutputStream打开服务器端的上传文件
                        FileOutputStream out = new FileOutputStream(file);
//                          流的对拷
                        byte[] bytes = new byte[1024];// 每次读取一个字节
                        int len;
//                          开始读取上传文件的字节,并将其输出到服务器端的上传文件输出流中
                        while ((len = in.read(bytes)) > 0)
                            out.write(bytes, 0, len);
                        in.close();
                        out.close();
                        fileItem.delete();
                        writer.print("文件上传成功!");
                    }
                }

            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}

文件下载

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>文件下载</title>
</head>
<body>

<a href="在服务器中的文件地址">文件下载</a>
</body>
</html>
package org.vector.upload;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "DownloadServlet", urlPatterns = "/download")
public class DownloadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        // 获取文件名
        String filename = request.getParameter("filename");
        // 文件所在的文件夹
        String folder = "/upload/";
        // 通知浏览器以下载的方式打开
        response.addHeader("Content-Type", "application/octet-stream");
        response.addHeader("Content-Disposition", "attachment;filename=" + filename);
        // 通过文件输入流读取文件
        InputStream in = getServletContext().getResourceAsStream(folder + filename);
        OutputStream out = response.getOutputStream();
        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = in.read(bytes)) != -1) {
            out.write(bytes, 0, len);
        }
    }

}

相关文章

网友评论

    本文标题:servlet实现文件上传和下载

    本文链接:https://www.haomeiwen.com/subject/nwyytktx.html