javaweb文件上传与下载

文件上传

导入jar包

在这里插入图片描述

页面代码
  <form action="/add" method="post" enctype="multipart/form-data">
    <input type="text" placeholder="输入编号" name="id">
    <p>照片:<input type="file"  name="stuPicture"></p>
    <input type="submit" value="提交">
  </form>
后端代码
package controller;
import org.apache.commons.fileupload.util.Streams;
import org.apache.tomcat.util.http.fileupload.FileItemIterator;
import org.apache.tomcat.util.http.fileupload.FileItemStream;
import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
import utils.JDBCUtils;
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.FileOutputStream;
import java.util.UUID;
@WebServlet("/add")
public class AddPicture extends HttpServlet {
    //上传目录
    public static final String UPLOAD_DIR = "C:\\Users\\23017\\Desktop\\picture\\";
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp){
        //创建上传对象
        ServletFileUpload upload = new ServletFileUpload();
        //设置文件大小
        upload.setFileSizeMax(10 * 1024 * 1024);//10mb
        //判断请求中是否有上传内容
        if(ServletFileUpload.isMultipartContent(req)){
            //获得文件迭代器
            try {
                FileItemIterator itemIterator = upload.getItemIterator(req);
                String id= null,picture = null;
                //遍历文件项目
                while(itemIterator.hasNext()){
                    FileItemStream item = itemIterator.next();
                    //判断表单项,是否是文件域
                    if(item.isFormField()){
                        //获得文本框类型的表单项的名字,读取值
                        String value = Streams.asString(item.openStream(),"UTF-8");
                        switch(item.getFieldName()){
                            case "picture": picture = value;
                                System.out.println("pppp=="+picture);
                            break;
                            case "id": id = value;break;
                        }
                    }else{
                        //处理文件域,读取文件的字节,写入到服务器的文件中
                        //处理文件的覆盖问题,文件名不重复(文件名设置为系统毫秒数 System.currentMills, UUID)
                        File file = new File(UPLOAD_DIR);
                        //如果上传目录不存在就创建
                        if(!file.exists()){
                            file.mkdir();
                        }
                        //截取后缀名
                        String fileName = item.getName();
                        String suffix = fileName.substring(fileName.lastIndexOf("."));
//                        stuPicture = System.currentTimeMillis() + suffix;
                        picture = UUID.randomUUID().toString().replace("-","") + suffix;
                        //读取上传文件,写入服务器文件
                        Streams.copy(item.openStream(),new FileOutputStream(UPLOAD_DIR + picture),true);
                    }
                }
                //添加到数据库
                int rows = JDBCUtils.update("insert into picture(id,picture) values(?,?)",
                        id,picture);
                if(rows > 0){
                    //跳转到查询学生的servlet
                    resp.sendRedirect("/index.jsp");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }
}

文件下载

代码
package controller;

import org.apache.commons.fileupload.util.Streams;

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.*;
import java.net.URLEncoder;

@WebServlet("/down.do")
public class DownloadServlet extends HttpServlet {
    public static final String DOWNLOAD_DIR = "C:\\Users\\23017\\Desktop\\picture\\";
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获得文件名
        String filename = req.getParameter("filename");
        System.out.println("filename="+filename);
        File file = new File(DOWNLOAD_DIR + filename);
        System.out.println("filename="+file.exists());
        if(file.exists()){
            //获得文件输入流(读到内存)
            InputStream inputStream = new FileInputStream(DOWNLOAD_DIR + filename);
            //获得输出流(给客户)
            OutputStream outputStream = resp.getOutputStream();
            //设置响应头 encode 编码
            resp.addHeader("content-disposition","attachment;filename="+
                    URLEncoder.encode(filename,"UTF-8"));
            //读取文件,发给客户端
            Streams.copy(inputStream,outputStream,true);
        }else {
            resp.getWriter().println("文件不存在");
        }
    }
}

运行效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值