文件upload和download

upload

上传必须设置表单提交方式为post因为 涉及到文件提交;并且要设置提交样式

enctype="multipart/form-data"   :多部分表单

什么意思?将表单以多段的方式提交;每一个key=value就是一段表单

这种提交方式无法用普通的 request.getParameter 接收

普通方法接收到的是 string类型的图片名

通过工具commons-fileupload解析多部分表单的解析 

导入两个jar包创建ServletFileUpload对象

ServletFileUpload的使用

1.解析请求体

        //完成多部分表单数据请求体的解析(图片,文件等)
DiskFileItemFactory factory = new DiskFileItemFactory();
//factory配置上传设置的对象
ServletFileUpload servletFileUpload=new ServletFileUpload(factory)

2.把读取的信息存入到集合

List<FileItem> fileItems = null;
try {
    fileItems=servletFileUpload.parseRequest(req);//用parseRequest对请求体进行解析  返回一个集合;存入每段表单

3.分别处理普通数据和文件数据

for (FileItem fileItem : fileItems) {
    if (fileItem.isFormField())//是否是普通的表单数据
    {
        String fieldName = fileItem.getFieldName();
        String value = fileItem.getString("utf-8");
        System.out.println(fieldName +"--->" +value);
    }
    else {
//是否是文件;文件处理
    //通过代码创建存储上传文件的目录headerimgs
    //String dirPath=this.getServletContext().getRealPath("/headimg");
    String dirPath=this.getServletContext().getContextPath();

    File dir=new File(dirPath+"/headimg");//部署到了out下
    if(!dir.exists()){ dir.mkdir();//只需要创建一次x
         }
    String fileName = fileItem.getName();//文件名
    System.out.println(fileName);
    String fname = UUID.randomUUID().toString()+fileName.substring(fileName.indexOf("."));
    String path = this.getServletContext().getRealPath("/headimg/"+fname);
    System.out.println(path);
        File file = new File(path);
        fileItem.write(file);

将传入的文件存到out目录下的headimg

 文件下载

DownloadServlet 通过工具类

commons.io.IOUtils

将服务器的文件发送到浏览器

 1.获取前端传过来的name

2.String mimeType = this.getServletContext().getMimeType("/download/"+filename);

        获取到当前路径下的。

//getMimeType获取文件类型 image/jpeg 路径:web/download/filename
response.setHeader("Content-type",mimeType);//设置响应头信息
response.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(filename,"utf-8"));
//处理方式:attachment: 附件。 "utf-8"设置文件编码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值