首页 > 其他分享 >文件上传下载

文件上传下载

时间:2024-09-01 23:15:13浏览次数:8  
标签:文件 上传下载 response File import new fileName public


import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.http.MediaType;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.nio.charset.StandardCharsets;

public class DownloadUtil {

    /**
     * 下载文件(适用大多数文件类型,如: word,excel,pdf,mp4 等)
     *
     * @param fileName  定义文件名(需带扩展名,如: .docx)
     * @param fileBytes
     * @param response
     */
    public static void downloadFile(String fileName, byte[] fileBytes, HttpServletResponse response) {
        if (StringUtils.isBlank(fileName)) {
            throw new RuntimeException("文件名不能为空");
        }
        String[] split = fileName.split(".");
        if (split.length == 1) {
            throw new RuntimeException("文件名需带扩展名");
        }
        try {
            response.reset();
            response.setHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
            // application/octet-stream: 二进制流传输(适用各种文件类型)
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
            OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
            outputStream.write(fileBytes);
            outputStream.flush();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static byte[] file2bytes(File file) {
        return FileUtil.readBytes(file);
    }

    public static byte[] inputStream2bytes(InputStream inputStream, boolean isClose) {
        return IoUtil.readBytes(inputStream, isClose);
    }

    /**
     * 下载 Excel 文件
     *
     * @param fileName
     * @param workbook
     * @param response
     */
    @SneakyThrows
    public static void downloadExcelByWorkbook(String fileName, Workbook workbook, HttpServletResponse response) {
        OutputStream os = null;
        try {
            if (!fileName.contains(".")) {
                fileName = fileName + ".xlsx";
            }
            response.setContentType("application/*");
            response.setHeader("content-disposition", "attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1"));
            response.setCharacterEncoding("UTF-8");
            os = response.getOutputStream();
            workbook.write(os);
            os.flush();
        } catch (Exception ignored) {

        } finally {
            os.close();
        }
    }

}

 
import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.IoUtil;
import cn.hutool.http.HttpUtil;
import lombok.SneakyThrows;
import org.apache.commons.io.FileUtils;
import org.junit.Test;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.HashMap;
import java.util.Map;


@RestController
public class UploadFileController {

 

    @SneakyThrows
    @PostMapping(value = "/upload")
    public void uploadMultipartFile(MultipartFile file) {
        File destFile = new File("E:" + File.separator + "upload-test-" + System.currentTimeMillis() + ".xlsx");
        file.transferTo(destFile);
    }

    @SneakyThrows
    @PostMapping(value = "/upload-binary-request")
    public void uploadBinary(HttpServletRequest request) {
        System.err.println(request.getContentType());
        File destFile = new File("E:" + File.separator + "upload-binary-test_" + System.currentTimeMillis() + ".xlsx");
        FileUtils.copyInputStreamToFile(request.getInputStream(), destFile);
    }

    @SneakyThrows
    @PostMapping(value = "/upload-binary-bytes")
    public void uploadBytes(@RequestBody byte[] bytes) {
        File destFile = new File("E:" + File.separator + "upload-bytes-test_" + System.currentTimeMillis() + ".xlsx");
        FileUtils.copyInputStreamToFile(IoUtil.toStream(bytes), destFile);
    }

    @SneakyThrows
    @PostMapping(value = "/upload-base64")
    public void uploadBase64(String base64) {
        File destFile = new File("E:" + File.separator + "upload-string-test_" + System.currentTimeMillis() + ".xlsx");
        Base64.decodeToFile(base64, destFile);
    }

    @Test
    public void testUploadMultipartFile() {
        File file = new File("E:" + File.separator + "test.xlsx");
        Map<String, Object> map = new HashMap<>();
        map.put("file", file);
        HttpUtil.post("http://localhost:8080/upload", map);
    }

    @Test
    public void testUploadBase64() {
        File file = new File("E:" + File.separator + "test.xlsx");
        Map<String, Object> map = new HashMap<>();
        map.put("base64", Base64.encode(file));
        HttpUtil.post("http://localhost:8080/upload-base64", map);
    }

}

标签:文件,上传下载,response,File,import,new,fileName,public
From: https://www.cnblogs.com/SetariaViridis/p/18391916

相关文章

  • C语言 - 自包含和包含其他文件
    在C语言中,头文件的设计可以采用自包含和包含其他文件的方式,以提高代码的可维护性和可重用性。一、头文件自包含含义:头文件自包含是指一个头文件能够独立地进行编译,不依赖于其他头文件的特定包含顺序。这意味着头文件应该包含其自身所依赖的所有定义和声明,以确保无论在什么......
  • php遍历文件夹以及子目录;
    php遍历文件夹以及子目录<?phpfunctionmy_dir($folderPath){ $arr_subdictory=array(); if(@$handle=opendir($folderPath)){ while(false!==($entry=readdir($handle))){ if($entry!="."&&$entry!=".."){//排除更目录 ......
  • C 语言项目中头文件包含的最佳实
    在经典的C语言项目中,以下是一些头文件包含的最佳实践:一、保持头文件自包含性使用条件编译防止重复包含:在每个头文件的开头和结尾使用预处理器指令来确保头文件只被包含一次。例如:#ifndefHEADER_NAME_H#defineHEADER_NAME_H//头文件内容#endif这样可以避免由于......
  • C语言 - 头文件包含
    在C语言中,条件编译是一种根据特定条件决定是否编译某段代码的机制。它可以提高代码的可移植性、灵活性和效率。一、条件编译的指令#ifdef、#ifndef、#endif:#ifdef:如果某个宏已被定义,则编译其后的代码块。#ifndef:如果某个宏未被定义,则编译其后的代码块。#endif:用于结束一......
  • 编程实现“ls -l 文件名”功能
    目录题目思想代码题目编程实现“ls-l文件名”功能思想首先定义了一个 structstat 类型的变量 st ,用于存储文件的状态信息。检查通过 stat 函数获取指定文件(argv[1])的状态信息是否成功。如果获取失败(返回值小于0),通过 perror 输出错误信息并返回......
  • 音视频入门基础:WAV专题(7)——FFmpeg源码中计算WAV音频文件每个packet的size值的实现
    一、引言从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以显示WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的size:这个“size”实际是AVPacket结构体中的成员变量size,为WAV......
  • Unclutter - 苹果电脑(Mac)桌面文件笔记剪贴板管理工具
    刚收拾好的电脑桌面马上又堆满了杂七杂八的文件?刚随手一记的笔记,回头却找不到了?马上来认识一下Unclutter,一款藏在Mac系统顶部的文件、笔记、剪贴板管理器。安装后,用户只需要将鼠标指针移动到屏幕顶部,向下滚动,Unclutter窗口就会滑落显现,无需给电脑桌面「添乱」。有时候......
  • DLL文件丢失?《阿玛拉王国:惩罚重制版》玩家必看指南
    在启动或游玩《阿玛拉王国:惩罚重制版》(KingdomsofAmalur:Re-Reckoning)这款动作角色扮演游戏时,不少玩家可能会遇到提示缺少某个DLL文件的情况,例如XINPUT1_3.dll、d3dx9_43.dll等。这些问题通常表明游戏所需的某个动态链接库(DLL)文件丢失或损坏。本文将详细介绍这类问题的原因......
  • C++头文件<algorithm>中常用函数简介
     概述头文件algorithm(算法库)中主要提供了一些对容器操作的函数,如排序、搜索、复制、比较等,因此使用频率还是很高的,由于主要是操作容器,所以函数的语法也很类似:algorithm_name(container.begin(),container.end(),...);其中,container.begin()和container.end()分......
  • 【Internet Protocol】ip介绍,如何组局域网实现远程桌面和文件共享
    @目录1.何为“上网”1.1定义1.2为什么连了WiFi就能上网了?2.ip2.1什么是ip2.2为什么区分广域网和局域网,ip的唯一性2.3如何查看设备的ip2.4什么叫"ping"2.5区分是否两个ip是否在同一局域网2.5.1最稳妥的方式:ip&mask2.5.2最方便的方式:ping2.6ipv4与ipv6的区别3.远程桌面控......