ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javaWeb上传与下载文件

2022-02-06 10:30:31  阅读:178  来源: 互联网

标签:fileupload javaWeb 上传 commons import servlet javax 下载 out


简介

fileupload常用于web文件的上传,因为操作简单效率高,因而比较流行.

添加Maven依赖

<!--fileupload的Maven依赖-->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

<!--处理流时用,fileUpload用-->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

fileupload方法

 

 

示例

文件的下载

package xin.student.fileoperator;

import org.apache.commons.io.IOUtils;

import javax.servlet.ServletContext;
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.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;

@WebServlet("/download")
public class Download 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 {
        //获取要下载的文件名
        String downloadFileName = "头像.jpg";
        //读取要下载的文件内容
        ServletContext servletContext = getServletContext();

        String mimeType = servletContext.getMimeType(downloadFileName);
        System.out.println("下载的文件类型:" + mimeType);
        //在回传前,通过响应头告诉客户端返回的数据类型
        resp.setContentType(mimeType);

        //获取浏览器不能用utf-8,要用base64
        //还要告诉客户端收到的数据是用于下载使用的(还是使用响应头),URLEncoder.encode()把汉字按指定的格式转为%xx的形式
        resp.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(downloadFileName, "UTF-8"));

        //获取资源的输入流,服务器解析的地址为http://ip/ 映射到web目录
        InputStream resourceAsStream = servletContext.getResourceAsStream("/" + downloadFileName);

        //获取相应的输出流
        OutputStream outputStream = resp.getOutputStream();

        //读取输入流中全部的数据,复制给给输入流,把下载的内容回传给客户端
        IOUtils.copy(resourceAsStream, outputStream);
    }
}

文件的上传

package xin.student.fileoperator;

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

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

@WebServlet("/uploadServlet")
public class UploadServlet extends HttpServlet {
    private String message;

    public void init() {
        message = "Hello World!";
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");

        // Hello
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>" + message + "</h1>");
        out.println("</body></html>");
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //判断是不是多段的数据(只有多段的数据,才是上传文件的)
        if (ServletFileUpload.isMultipartContent(request)) {
            //创建FileItemFactory工厂实现类
            FileItemFactory fileItemFactory = new DiskFileItemFactory();

            //创建用于解析上传数据的工具类ServletFileUpLoad类
            ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
            try {
                //解析上传的数据,得到每一个表单项FileItem
                List<FileItem> list = servletFileUpload.parseRequest(request);

                for (FileItem fileItem : list) {
                    //普通表单项目
                    if (fileItem.isFormField()) {
                        //获取表单的name属性值
                        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());

                        fileItem.write(new File("C:\\Users\\Administrator\\Desktop\\文件上传与下载\\"+fileItem.getName()));
                    }
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void destroy() {
    }
}

HTML文件

<!doctype html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>File</title>
</head>
<body>
    <form action="/uploadServlet" method="post" enctype="multipart/form-data">
        用户名:<input type="text" name="username"/> <br/>
        头像:<input type="file" name="photo"> <br/>
        <input type="submit" value="上传">
    </form>
    <a href="/download">下载</a>
</body>
</html>

标签:fileupload,javaWeb,上传,commons,import,servlet,javax,下载,out
来源: https://blog.csdn.net/LYXlyxll/article/details/122792766

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有