文件上传与文件下载

文件上传与文件下载

servlet文件上传

<!--文件上传-->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
package com.study.upload;

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

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.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

@WebServlet("/upload")
public class UploadServletWay2 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //上传文件的存放路径
        String realPath = req.getServletContext().getRealPath("/upload");
        File file=new File(realPath);
        //不存在就创建
        if(!file.exists() && !file.isDirectory()){
            file.mkdir();
        }
        //判断是否是文件上传表单
        Boolean isMultipart= ServletFileUpload.isMultipartContent(req);
        if(!isMultipart){
            //不是返回
            return ;
        }
        //文件上传结果
        String message="";
        try{
            DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory();
            ServletFileUpload fileUpload=new ServletFileUpload(diskFileItemFactory);
            List<FileItem> fileItems = fileUpload.parseRequest(req);
            for(FileItem fileItem : fileItems){
                //获取表单空间name属性的值
                String name = fileItem.getFieldName();
                //判断是上传文件还是普通输入框
                if(fileItem.isFormField()){
                    //拿到name属性的值
                    String value = fileItem.getString();
                    System.out.println(name+"=="+value);
                }else{  //上传文件
                    String fileName = fileItem.getName();
                    System.out.println(name+"=="+fileName);
                    //获取上传文件后缀
                    String substring = fileName.substring(fileName.lastIndexOf(".") + 1);
                    //为上传文件创建一个新的唯一名称
                    String newFileName = UUID.randomUUID().toString() + "." + substring;
                    fileItem.write(new File(file,newFileName));

                    message="上传文件成功";
                    //删除文件上传生成的临时文件
                    fileItem.delete();
                }
            }

        }catch (Exception e){
            message="文件上传失败";
            e.printStackTrace();
        }

        req.setAttribute("msg",message);
        req.getRequestDispatcher("fileuploadresult.jsp").forward(req,resp);
    }
}

servlet文件下载

package com.study.down;

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.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * 文件下载
 */
@WebServlet("/down")
public class DownServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //拿到下载文件名
        String filename = req.getParameter("filename");
        filename=new String(filename.getBytes("ISO-8859-1"),"utf-8");
        //从服务器中找到绝对路径
        String realPath = req.getServletContext().getRealPath("/imag/" + filename);
        System.out.println("下载文件地址"+realPath);
        //设置浏览器不弹出文件而是下载框
        resp.setContentType("application/x-msdownload");
        filename= URLEncoder.encode(filename,"UTF-8");
        //让浏览器能够支持下载文件
        resp.setHeader("content-Disposition","attachment;filename="+filename);
        Files.copy(Paths.get(realPath),resp.getOutputStream());
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值