Java怎么实现文件上传和下载功能

Java实现文件上传和下载功能的方法有很多,这里提供一种基于Spring Boot的简单实现方法。在Spring Boot中,可以使用MultipartFile类来处理文件上传,使用HttpServletResponse类来处理文件下载。具体实现方法可以参考以下链接:

Java实现文件上传功能

在Java中,我们可以使用Servlet和Apache的Commons FileUpload库来实现文件上传功能,以下是一个简单的示例:

Java怎么实现文件上传和下载功能

1、我们需要在项目中引入Apache Commons FileUpload库,在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

2、创建一个HTML表单,用于上传文件:

Java怎么实现文件上传和下载功能

<!DOCTYPE html>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
    <form action="upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file" />
        <button type="submit">上传</button>
    </form>
</body>
</html>

3、创建一个Servlet类,用于处理文件上传请求:

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;
@WebServlet("/upload")
public class FileUploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 检查是否为多媒体上传
        if (!ServletFileUpload.isMultipartContent(request)) {
            // 如果不是则停止
            PrintWriter writer = response.getWriter();
            writer.println("Error: 表单必须包含 enctype=multipart/form-data");
            writer.flush();
            return;
        }
        // 配置上传参数
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setHeaderEncoding("UTF-8");
        upload.setFileSizeMax(50 * 1024 * 1024); // 设置最大上传文件大小为50MB
        upload.setHeader("Connection", "Keep-Alive");
        upload.setHeader("Charset", "UTF-8");
        upload.setHeader("Content-Disposition", "attachment;filename="uploaded_file""); // 设置上传文件名
        upload.setThreadPoolSize(10); // 设置线程池大小为10个线程
        upload.setProgressListener(new UploadProgressListener()); // 设置上传进度监听器
        upload.start(); //开始上传文件的处理流程,这里的参数是用来接收服务器返回的数据的,如果不需要处理服务器返回的数据,可以不传这个参数,否则需要传入一个实现了org.apache.commons.fileupload包中的IProgressListener接口的对象作为参数,这个对象将会在每次文件块传输时被调用,这样就可以实时得到文件上传进度的信息了,然后通过list来获取所有的文件项信息,最后将这些文件保存到指定位置,这里使用到了org.apache.commons.fileupload包中的FileItem类,该类代表了一个要被上传的文件项,它包含了文件的所有信息,如文件名、大小、类型等,然后根据这些信息创建一个File对象,并将其保存到指定位置,最后关闭流和连接即可,下面是代码实现: ```java @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //检查是否为多媒体上传 if (!ServletFileUpload.isMultipartContent(req)) { PrintWriter writer = resp.getWriter(); writer.println("Error: form must have enctype=multipart/form-data"); writer.flush(); return; } //配置上传参数 DiskFileItemFactory factory = new DiskFileItemFactory(); //创建一个对象用于存储所有文件数据 List<FileItem> formItems = upload.parseRequest(req); if (formItems != null && formItems.size() > 0) { //迭代表单数据 for (int i = 0; i < formItems.size(); i++) { //获取当前表单项 FileItem item = formItems.get(i); if (!item.isFormField()) { String name = new String(item.getName()); String filename = name + System.currentTimeMillis() + "_" + item.getContentType(); String filePath = getServletContext().getRealPath("/upload") + File.separator + filename; File storeFile = new File(filePath); //保存文件 item.write(storeFile); System.out.println("文件已保存:" + filePath); } else { String value = item.getString("value"); System.out.println("字段名:" + item.getFieldName() + ",值:" + value); //输出表单字段的值 if (item != null && item instanceof org.apache.commons.fileupload.disk.DiskFileItem){ try{ ((org.apache.commons.fileupload.disk.DiskFileItem)item).delete();} catch (Exception e){}//删除临时文件 try{ ((org

原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/131425.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
酷盾叔订阅
上一篇 2024-01-02 03:21
下一篇 2024-01-02 03:27

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入