简单实现文件的上传下载,简单易懂

前言:

文件的上传和下载在日常开发中很是常见,那么这一功能是如何实现的呢,下面我给大家介绍一下


实现条件:

1、 需要一个form标签,method为post请求
2、 form的encType属性值为multipart/form-data
3、input标签的type=file
4.需要的jar包()
工程目录
在这里插入图片描述


具体实现:

UploadServlet.java(上传)

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

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
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;

public class UploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //1.判断上传的数据是否是多段数据(只有事多段的数据才是文件上传的)
       if(FileUpload.isMultipartContent(req)){
           //创建FileItemFactory工厂实现类
           FileItemFactory fileItemFactory=new DiskFileItemFactory();
           //创建用于解析上传数据的工具类FileUpload
   FileUpload fileUpload=new FileUpload(fileItemFactory);
           try {
               List<FileItem> list=fileUpload.parseRequest(req);
               //循环判断每一个表单项是普通类型还是上传的文件
               for(FileItem fileItem:list){
                   if(fileItem.isFormField()){
                       //普通表单项
                       System.out.println("表单项的name属性值:"+fileItem.getFieldName());
                       //参数UTF-8解决乱码问题
                       System.out.println("表单项的value值:"+fileItem.getString("UTF-8"));
                   }else{
                       //上传的文件
                       System.out.println("表单项的name属性值:"+fileItem.getFieldName());
                       System.out.println("上传的文件名:"+fileItem.getName());
                       fileItem.write(new File("D:\\"+fileItem.getName()));
                   }

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

download.java(下载)

import org.apache.commons.io.IOUtils;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
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;

public class download extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //1.获取要下载的文件名
        String downloadfilename="1.jpg";
        //2.读取下载的文件内容(通过ServletContext对象可以读取)
        ServletContext servletContext=getServletContext();
        //获取要下载的文件类型
        String mimetype=servletContext.getMimeType("/file/"+downloadfilename);
        //4.回传前告诉客户端回传的类型
        resp.setContentType("mimetype");
        //5.告诉客户端收到的数据是用来下载的(响应头)
        //Content-Disposition 响应头表示收到的数据怎么处理
        //attachment表示附件,表示下载
        resp.setHeader("Content-Disposition","attachment;filename="+downloadfilename);
           //url编码解决下载文件名乱码问题(谷歌和IE)
      //  resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode("中国.jpg","UTF-8"));

       InputStream resourceAsStream= servletContext.getResourceAsStream("/file/"+downloadfilename);
      //获取响应的输出流
        OutputStream outputStream=resp.getOutputStream();
        //3,把下载的文件传回给客户端
        //读取输入流的数据复制给输出流,输出给客户端
        IOUtils.copy(resourceAsStream,outputStream);

    }
}

前端页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/upandload_war_exploded/uploadServlet"  method="post"  enctype="multipart/form-data" >
    用户名:<input type="text" name="username"><br>
    头像:<input type="file" name="photo"><br>
    <input type="submit"  value="上传">
</form>
</body>
</html

成果展示:

文件的上传
在这里插入图片描述
服务器接受上传的文件
在这里插入图片描述
下载文件
在这里插入图片描述

结尾

以后需要用的jar包我会上传。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_树先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值