首页 > 其他分享 >对文件流MD5后,该文件流上传到阿里云后文件为空

对文件流MD5后,该文件流上传到阿里云后文件为空

时间:2023-06-27 13:46:16浏览次数:46  
标签:文件 String 上传 InputStream file 为空 MD5

目录

背景

对于前端上传的文件,后端对文件进行MD5以获取文件的唯一标识(极极小可能冲撞),然后查询文件表是否上传过,如果存在则不用再上传oss,从而节省存储空间

存在问题的代码

    @SneakyThrows
    public String uploadFile(MultipartFile file) {
        InputStream inputStream = file.getInputStream();
        String md5 = FileUtils.md5(inputStream);
        //查询是否上传,否则上传oss
        String url = ossTemplate.upload(inputStream);
        return url;
    }

出现的问题:

对文件流MD5后,该文件流上传到阿里云后文件为空

原因: 因为在计算MD5值时将输入流全部读取了一遍,并且没有重新指定位置,导致上传到OSS时InputStream已经到达了末尾,因此文件为空。

可将InputStream的位置重置为0,但InputStream不支持reset方法,方案无效

// 重置InputStream的位置
inputStream.reset();

解决方案

重新获取文件流,原因:file.getInputStream()每次获取的都是新的InputStream对象,

    @SneakyThrows
    public String uploadFile(MultipartFile file) {

        String md5 = FileUtils.md5(file.getInputStream());
        //查询是否上传,否则上传oss
        String url = ossTemplate.upload(file.getInputStream());
        return url;
    }

标签:文件,String,上传,InputStream,file,为空,MD5
From: https://www.cnblogs.com/lyn8100/p/17508609.html

相关文章

  • 一行命令使用 Docker 编译 Latex 文件,简单优雅
    使用Docker编译LaTeX文章LaTeX是一种常用的排版系统,它可以帮助用户创建漂亮、专业的文档。但是,安装和配置LaTeX比较麻烦,特别是对于初学者而言。Docker是一个开源平台,可以让用户通过容器化技术来构建、发布和运行应用程序。使用Docker容器可以避免依赖问题,从而使得在不......
  • MacOS 清除软件缓存和配置文件
    MacOS清除软件缓存和配置文件最近在mac上安装并激活软件的时候遇到问题,不论如何重新安装软件,软件都不会更新软件信息,推断需要删除软件的配置文件macos软件安装后,文件所在的路径在macos上,软件安装会将缓存等文件存放到如下可能的路径:Binaryanddockiconsarelocatedin/Ap......
  • PROFINET设备描述文件说讲之三
    设备中的模块PROFINETIO设备的第一个槽给了DAP,其他的槽位就是各种不同模块的。模块列表的层次结构如下所示:ModuleList|+--ModuleItem|+--ModuleInfo|||+--Name|+--TextId|+--InfoText|+--OrderNumber|+--HardwareRelease|+--SoftwareRelease|+--Use......
  • 如何校验本站下载的文件的完整性
    如何校验本站下载的文件的完整性如何使用shasumsha256sum校验文件的完整性(macOS,Linux,Windows)请访问原文链接:https://sysin.org/blog/shasum/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org本站文件都存储在百度网盘上,因为某些未知的原因,一些大型文件,比如......
  • delphi XLS文件另存为xlsx格式
    ExcelApp.activeworkbook.saveas(AxlsExportFile+'\华宝导入'+IntToStr(n)+'.xlsx',51);   https://www.cnblogs.com/guorongtao/p/13432383.html procedureSaveAs(constFilename:WideString;FileFormat:OleVariant;Password:OleVariant;......
  • 将 SmartAssembly 与单文件可执行文件一起使用 (.NET Core 6)
    .NETCore6引入了创建单文件可执行文件的功能。这只允许分发一个应用程序文件,因为所有配置和依赖项都包含在二进制文件本身中。该功能为依赖项嵌入提供了一种本机方法,这在发布生成数百个程序集的独立应用程序时最有益。它可用于依赖于框架或自包含的应用程序,但在这两种情况下都......
  • java中 如何判断字符串为空
    在Java中,可以使用以下方法来判断字符串是否为空:使用length()方法判断长度是否为0:Stringstr="hello";if(str.length()==0){System.out.println("字符串为空");}使用isEmpty()方法判断是否为空字符串:Stringstr="hello";if(str.isEmpty()){System.out.printl......
  • java中 如何判断字符串为空
    在Java中,可以使用以下方法来判断字符串是否为空:使用length()方法判断长度是否为0:Stringstr="hello";if(str.length()==0){System.out.println("字符串为空");}使用isEmpty()方法判断是否为空字符串:Stringstr="hello";if(str.isEmpty()){System.out.printl......
  • 【Springboot】- 指定端口和配置文件
    Springboot服务jar的外部指定端口和文件方式springboot指定端口的三种方式第一配置文件中添加server.port=9090第二在命令行中指定启动端口,比如传入参数java-jarbootsample.jar--server.port=9000第三传入虚拟机系统属性java-Dserver.port=9000-jarbootsample.j......
  • 在.gitignore中如何写可以忽略掉无扩展名的Unix可执行文件
    我也遇到这个问题,自己多次尝试找到了解决方案。先把我的解答发出来:#忽略所有文件和目录(当前目录不能忽略)*#增加指定目录和下面所有目录!/dir1/!/dir1/**/!/dir2/!/dir2/**/#增加指定扩展名文件和Makefile文件!*.cpp!*.c!*.h!Makefile#忽略特殊文件,一般是......