SpringBoot 文件或图片上传与下载功能的实现

yizhihongxing

接下来我将详细讲解 SpringBoot 文件或图片上传与下载功能的实现攻略。

1. 文件上传

1.1 前端实现

前端代码中需要添加一个上传文件的表单及其相关事件处理。可以使用HTML5自带的 FormData 类,一步步向后台传输数据。代码示例如下:

<form id="fileUploadForm">
  <input type="file" name="upfile"/>
  <input type="button" value="上传" onclick="upload()"/>
</form>
function upload() {
  var formData = new FormData($('#fileUploadForm')[0]);
  $.ajax({
    url: "/upload",
    type: "POST",
    data: formData,
    processData: false,
    contentType: false,
    success: function (data) {
      alert('上传成功!');
    },
    error: function () {
      alert('上传失败!');
    }
  });
}

1.2 后端实现

在 SpringBoot 中,我们可以使用 Spring MVC 的注解来实现上传文件的功能。可以使用 @RequestParam 注解与 MultipartFile 类来接收前端传来的文件。代码示例如下:

@PostMapping("/upload")
public String upload(@RequestParam("upfile") MultipartFile file,
                     RedirectAttributes redirectAttributes) {
    if (file.isEmpty()) {
        redirectAttributes.addFlashAttribute("message", "请选择一个文件进行上传。");
        return "redirect:/uploadStatus";
    }

    try {
        byte[] bytes = file.getBytes();
        String fileName = file.getOriginalFilename();
        Path path = Paths.get(UPLOAD_FOLDER + fileName);

        // 文件保存到本地
        Files.write(path, bytes);

        redirectAttributes.addFlashAttribute("message",
                "文件 " + fileName + " 上传成功。");

    } catch (IOException e) {
        e.printStackTrace();
    }

    return "redirect:/uploadStatus";
}

其中,我们可以使用 Files.write() 方法将文件保存到本地。UPLOAD_FOLDER 变量是存储上传文件的文件夹路径。

2. 文件下载

2.1 前端实现

前端代码中需要添加一个下载文件的链接,点击此链接时会向后台请求下载该文件。代码示例如下:

<a href="/download?filename=xxx.xxx">下载文件</a>

2.2 后端实现

在 SpringBoot 中,我们可以使用 HttpServletResponse 的方法来实现下载文件的功能。如下代码示例中,我们可以使用 FileInputStream 读取文件,并使用 HttpServletResponse 的 setContentType() 和 setHeader() 方法来设置下载的文件格式与文件名。最后,将文件以流的方式写入 HttpServletResponse 中,实现文件下载。

@GetMapping("/download")
public void downloadFile(HttpServletRequest request, HttpServletResponse response) {
    String fileName = request.getParameter("filename");
    String filePath = UPLOAD_FOLDER + fileName;

    File file = new File(filePath);
    if (!file.exists()) {
        OutputStream outputStream = null;
        try {
            outputStream = response.getOutputStream();
            response.setContentType("text/html; charset=UTF-8");
            outputStream.write("文件不存在!".getBytes());
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return;
    }

    try (
        InputStream inputStream = new FileInputStream(file);
        OutputStream outputStream = response.getOutputStream()
     ) {
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);

        byte[] buffer = new byte[1024];
        int len;
        while ((len = inputStream.read(buffer)) > 0) {
            outputStream.write(bytes, 0, len);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

以上就是 SpringBoot 文件或图片上传与下载功能的实现攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 文件或图片上传与下载功能的实现 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • HTML5有哪些新特征

    HTML5是HTML的第五个版本,标志着HTML语言的重大升级。主要改进包括语义化标签、多媒体支持、表单控件、Canvas和SVG支持等功能。接下来我将介绍HTML5的新特征。 语义化标签 HTML5加入了一些新的语义化标签,这些标签可以让页面结构更为清晰明了。以下是一些常见的标签及其作用示例: \<header>和\<footer>…

    html 2023年5月30日
    00
  • 美图秀秀怎么设计闪图?

    美图秀秀是一款功能强大的图片处理软件,它可以帮助用户设计出各种各样的图片,包括闪图。以下是设计闪图的详细攻略: 步骤1:打开美图秀秀 打开美图秀秀软件。 单击“新建”按钮。 选择“自定义尺寸”。 输入闪图的尺寸。 单击“确定”按钮。 步骤2:添加图片和文字 单击“插入”菜单。 选择“图片”或“文字”。 选择要添加的图片或文字。 拖动图片或文字到闪图中。 步骤…

    html 2023年5月17日
    00
  • win10提示0x80070035错误找不到网络路径怎么办?

    如果您在使用Windows 10时遇到了0x80070035错误,提示找不到网络路径,可以尝试以下解决方法: 解决方法1:检查网络连接 确保您的计算机和其他设备都连接到同一个网络。 检查网络连接是否正常,可以尝试重新连接Wi-Fi或以太网。 如果您使用的是无线网络,请尝试将路由器和电脑之间的距离缩短,或者尝试使用有线网络连接。 解决方法2:检查网络共享设置 …

    html 2023年5月17日
    00
  • edge浏览器怎么设置首页地址 edge浏览器设置首页地址方法

    以下是“Edge浏览器怎么设置首页地址 Edge浏览器设置首页地址方法”的完整攻略: Edge浏览器怎么设置首页地址? Edge浏览器是微软公司推出的一款浏览器,可以让用户浏览网页、搜索信息等。在使用Edge浏览器时,有时需要设置首页地址,以便更快地访问常用网站。下面是一些关于Edge浏览器怎么设置首页地址的技巧和步骤,可以帮助用户完成这些操作。 技巧1:了…

    html 2023年5月18日
    00
  • AS3.0实例学习 熟悉xml的运用

    AS3.0实例学习 熟悉xml的运用 指的是使用AS3.0编程语言来操作XML数据,可以实现对XML文件的读取、解析和操作。下面是详细的攻略: 什么是XML? XML(Extensible Markup Language)是一种用于存储和传输数据的标记语言,可以存储结构化数据,并允许开发人员定义自己的标记。XML可以用于在不同的操作系统、应用程序之间共享和传…

    html 2023年5月30日
    00
  • ps怎么做出公章-教你用PS制作逼真的公章教程

    以下是使用Photoshop制作公章的详细攻略: 步骤1:准备工作 打开Photoshop软件,并创建一个新的文档。 设置文档的大小和分辨率,以适应您需要制作的公章大小。 在工具栏中选择“椭圆形工具”,并绘制一个圆形。 在图层面板中,选择“新建图层”,并将其命名为“外框”。 步骤2:制作公章外框 在“外框”图层上,使用“椭圆形选框工具”绘制一个圆形选择区域。…

    html 2023年5月17日
    00
  • Android 活动条ActionBar的详解及实例代码

    Android 活动条ActionBar的详解及实例代码 什么是ActionBar ActionBar是Android系统自带的一种导航栏控件,通常用于在应用程序的最顶部显示标题、选项菜单和其他操作按钮。 如何使用ActionBar 使用ActionBar需要引入androidx.appcompat.widget.Toolbar这个类,并在布局文件中添加相应…

    html 2023年5月30日
    00
  • Html5元素及基本语法详解

    如您所要求,我将详细讲解“Html5元素及基本语法详解”的完整攻略,包括基本语法、常用HTML5元素以及相关示例,在下文中逐一说明。 基本语法 1. HTML文档的基本结构 HTML5文档的基本结构有三个部分,其中head和body是必须要有的部分: <!DOCTYPE html> <!– HTML5文档类型声明 –> <h…

    html 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部