实现文件上传和下载

这篇具有很好参考价值的文章主要介绍了实现文件上传和下载。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文件上传的前端页面:

multiple表示支持一次上传多个文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传文件</title>
</head>
<body>
<form action="/getFiles" enctype="multipart/form-data" method="post">
  <input type="file" name="file" id="file" multiple><br />
  <button type="submit">上传</button>
</form>
</body>
</html>

上传单个文件的servlet代码:

@MultipartConfig该注解表示这个servlet支持文件上传

package servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;

@WebServlet("/upload")
//location中写的是默认指定上传的路径,如果要是下面不写路径,就默认上传到这个路径
@MultipartConfig(location="E:\\temp")
public class UploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码格式,防止乱码
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //上传文件的逻辑
        //对应html里面写的name
        Part file = req.getPart("file");
        //获取上传文件的名称
        String fileName = file.getSubmittedFileName();
        String name = fileName;
        System.out.println("上传文件的名称:" + fileName);
        //html中定义的name属性的值
        System.out.println(file.getName());
        String dir = "E:\\upload";
        fileName = dir + File.separator + fileName;
        File file1 = new File(fileName);
        if(!file1.getParentFile().exists()){
            file1.getParentFile().mkdirs();
        }
        System.out.println(fileName);
      try {
          file.write(fileName);
          String downloadLink = "<a href=\"/download?file=" + name + "\">下载图片</a>";
          resp.getWriter().write("<h3>上传成功</h3>" + downloadLink);
      }catch (IOException e){
          e.printStackTrace();
          resp.getWriter().write("<h3>上传失败</h3>");
      }
    }

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

    }
}

支持一次上传多个文件的servlet代码实例:

package servlet;

import utils.Constant;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
@WebServlet("/uploadfiles")
@MultipartConfig
public class UploadFilesServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置编码格式
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //获取要上传的多个文件
        Collection<Part> parts = req.getParts();
        String downloadLink = "";
        String message = "";
        for (Part part : parts) {
            //获取文件类型
            String type = part.getContentType();
            //获取要上传的文件名
            String name = part.getSubmittedFileName();
            if(Constant.ALLOW_TYPES.contains(type)){
                String fileName = Constant.UPLOAD_PATH + File.separator + name;
                File file = new File(fileName);
                if(!file.getParentFile().exists()){
                    //目标目录不存在就去创建
                    file.getParentFile().mkdirs();
                }
                part.write(fileName);
                downloadLink = downloadLink + "<a href='http://127.0.0.1/download?file=" + name + "'>下载" + name.substring(0,name.lastIndexOf(".")) + "</a><br>";
                message = message + "<p>" + name + "上传成功</p>";
            }else {
                message = message + "<p>" + name + "上传失败,文件格式不支持</p>";
            }
        }
        String html = "<html><body>";
        html += message;
        html += "<p>下载地址:</p>";
        html += downloadLink;
        html += "</body></html>";
        resp.getWriter().write(html);
    }
}

展示文件列表:

package servlet;

import utils.Constant;
import utils.FileUtils;

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;

@WebServlet("/list")
public class FileListServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        File file = new File(Constant.UPLOAD_PATH);
        File[] files = file.listFiles(f -> f.isFile());
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        if(files != null && files.length > 0){
            StringBuilder html = new StringBuilder("<table>");
            html.append("<tr>").append("<th>序号</th>").append("<th>文件名</th>").append("<th>文件大小</th>").append("<th>修改时间</th><th>操作</th></tr>");
            //遍历这个目录
            for (int i = 1; i <= files.length; i++) {
                File f = files[i - 1];
                html.append("<td>").append(i).append("</td>");
                html.append("<td>").append(f.getName()).append("</td>");
                html.append("<td>").append(FileUtils.getSize(f.length())).append("</td>");
                html.append("<td>").append(FileUtils.getTime(f.lastModified())).append("</td>");
                String downloadLink = "/download?file=" + f.getName();
                html.append("<td><a").append(" href=").append(downloadLink).append(">下载</a>").append("</td>").append("</tr>");
            }
            html.append("</table>");
            resp.getWriter().write(html.toString());
        }else {
            resp.getWriter().write("<h3>服务端上传目录为空</h3>");
        }
    }
}

下载文件的前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="/download?file=2.jpg">下载</a>
</body>
</html>

下载文件的servlet:文章来源地址https://www.toymoban.com/news/detail-717228.html

package servlet;

import utils.Constant;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
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.FileInputStream;
import java.io.IOException;
@WebServlet("/download")
public class DownLoadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //告诉浏览器要响应的是二进制流
        resp.setContentType("application/octet-stream");
        //获取本次下载的文件名称
        String file = req.getParameter("file");
        //设置以附件的形式下载,指定下载的文件名是原来的文件名
        resp.setHeader("content-disposition","attachment;filename=" + file);
        //要下载的文件的完整路径
        String path = Constant.UPLOAD_PATH + File.separator + file;
        //先用输入流读进来
        FileInputStream in = new FileInputStream(path);
        //获取响应的输出流
        ServletOutputStream out = resp.getOutputStream();
        //将文件的内容写入到输出流
        in.transferTo(out);
        out.flush();
        out.close();
        in.close();

    }

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

    }
}

到了这里,关于实现文件上传和下载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【hadoop】使用Java API 上传下载数据

    使用工具类简化后的代码: 使用工具类简化后的代码:

    2024年02月16日
    浏览(29)
  • 后端:使用easyExcel实现解析Excel文件读取数据。前端:Excel模板下载、前端上传文件

            本篇是EasyExcel快速入门知识,讲解如何读取Excel文件,对Excel中错误信息如空字符、必填项为空、表格格式校验做到处理 ,并给出了实际项目中示例代码;为什么要使用easyexcel;原因是相比于poi,easyexcel更加轻量级,读取写入API方便,并且在工作中占用内存较小;

    2024年02月05日
    浏览(55)
  • 前端常用的上传下载文件的几种方式,直接上传、下载文件,读取.xlsx文件数据,导出.xlsx数据

    1.1根据文件流Blob进行下载 1.2根据下载文件链接直接进行下载 html

    2024年02月12日
    浏览(29)
  • 实现文件上传和下载

    文件上传的前端页面: multiple表示支持一次上传多个文件 上传单个文件的servlet代码: @MultipartConfig该注解表示这个servlet支持文件上传 支持一次上传多个文件的servlet代码实例: 展示文件列表: 下载文件的前端页面 下载文件的servlet:

    2024年02月08日
    浏览(31)
  • SpringMVC实现文件上传&下载(2)

    文件上传步骤 第一步:由于SpringMVC使用的是commons-fileupload实现,故将其组件引入项目中,这里用到的是commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar。 第二步:spring-mvx中配置MultipartResolver处理器。可在此加入对上传文件的属性限制。 第三步:在Controller的方法中添加MultipartFile参数。

    2024年03月09日
    浏览(47)
  • fastDFS实现文件上传与下载

    我们在做项目的时候经常会遇到文件的上传与下载。你们是怎么做的呢?现在有一个技术可以非常简单的实现这个功能——fastDFS FastDFS是一个分布式文件系统,使用FastDFS可以非常容易搭建一套高性能的文件服务器集群提供文件上传、下载服务。 它主要包含两个部分, Tracke

    2024年02月07日
    浏览(44)
  • Github创建一个新仓库,关联本地数据并上传文件的图文步骤

    查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置,前后端开发环境的配置,编辑器的配置,网络服务的配置,网络命令的应用与配置,windows常见问题的解决等。 工作中,我们经常会使用github来承享别人的代码果实,同时我们也会把自己的成果分享给别人,互相帮助

    2024年02月05日
    浏览(73)
  • 文件上传下载系列——如何实现文件秒传

    🎃简介: 👻核心思想: MD5是什么? 实现步骤: 🎄实操: 1、java生成文件MD5码 2、javascript生成文件MD5码 ⛳️基于秒传的分片上传下载 上传: 下载: 🍢MD5存储位置 1、持久化到数据库中 2、存储到redis中 🎋总结         文件秒传是指在文件上传过程中,如果上传的文件

    2024年02月01日
    浏览(29)
  • SpringMVC 实现文件的上传和下载

    SpringMVC 是一个基于 Java 的 Web 框架,它提供了方便的文件上传和下载功能。下面是它的实现原理简要描述: 文件上传: 客户端通过表单(HTML 的 标签)将文件选择并提交到服务器。 服务器接收到请求后,SpringMVC 会将字节流形式的文件内容封装成 MultipartFile 对象。 SpringMVC 使

    2024年02月05日
    浏览(39)
  • SpringBoot 如何实现文件上传和下载

    当今Web应用程序通常需要支持文件上传和下载功能,Spring Boot提供了简单且易于使用的方式来实现这些功能。在本篇文章中,我们将介绍Spring Boot如何实现文件上传和下载,同时提供相应的代码示例。 Spring Boot提供了Multipart文件上传的支持。Multipart是HTTP协议中的一种方式,用

    2024年02月15日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包