oss文件上传与下载

2023-10-31

上传:如何使用流式上传和文件上传方式上传文件_对象存储 OSS-阿里云

package com.vazyme.kf.client.aliyun.oss.manager;


import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.SimplifiedObjectMeta;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.OutputStream;

import javax.servlet.http.HttpServletResponse;

import lombok.extern.slf4j.Slf4j;

@Component
@Slf4j
@RefreshScope  // 会监听变化实时变化值
public class OssManager {

    @Value("${third.aliyun.oss.endpoint:''}")
    private String endpoint;
    // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    @Value("${third.aliyun.oss.accessKeyId:''}")
    private String accessKeyId;
    @Value("${third.aliyun.oss.accessKeySecret:''}")
    private String accessKeySecret;
    // 填写Bucket名称,例如examplebucket。
    @Value("${third.aliyun.oss.bucketName:''}")
    private String bucketName;


    @Value("${file.baseUrl:''}")
    private String prePath;


    /**
     * 写入文件到oss
     * @author pengbin <pengbin>
     * @date 2022/4/12 14:48
     * @param    objectName 文件名
     * @param sb 文件流
     * @return
     */
    public void writeOss(String objectName,StringBuffer sb){

        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 创建PutObjectRequest对象。
//        File file = new File("D:\\opt\\upload\\vazyme-qr\\01\\012022040511242313812.txt");
//        String objectName = prePath + "/test" + file.getName();
        try {
            // 创建PutObjectRequest对象。
            // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);

            // 填写字符串。

            // 上传文件。
//            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, file);
            // 上传文件。
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(sb.toString().getBytes()));
            ossClient.putObject(putObjectRequest);

        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

    /**
     * 写入文件到oss
     * @author pengbin <pengbin>
     * @date 2022/4/12 17:45
     * @param
     * @return
     */
    public void writeFileOss(String objectName,String filePath){

        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        // 创建PutObjectRequest对象。
//        File file = new File("D:\\opt\\upload\\vazyme-qr\\01\\012022040511242313812.txt");
//        String objectName = prePath + "/test" + file.getName();
        try {
            // 创建PutObjectRequest对象。
            // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);

            // 填写字符串。

            // 上传文件。
//            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, file);
            // 上传文件。
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
            ossClient.putObject(putObjectRequest);

        } catch (Exception e){
            throw e;
        }finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }



    /**
     * 获取文件信息
     * @author pengbin <pengbin>
     * @date 2022/4/12 15:00
     * @param
     * @return
     */
    public String getSimplifiedObjectMeta(String filePath){
        String fileSize = "";
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        try {
            SimplifiedObjectMeta objectMeta = ossClient.getSimplifiedObjectMeta(bucketName, filePath);
            fileSize = String.valueOf(objectMeta.getSize());
        } catch (OSSException oe) {
            log.error("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            log.error("Error Message:" + oe.getErrorMessage());
            log.error("Error Code:" + oe.getErrorCode());
            log.error("Request ID:" + oe.getRequestId());
            log.error("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            log.error("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            log.error("Error Message:" + ce.getMessage());
        }finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return fileSize;
    }

    /**
     * 文件下载,获取文件信息
     * @author pengbin <pengbin>
     * @date 2022/4/12 15:06
     * @param
     * @return
     */
    public void download(String fileName, String filePath, HttpServletResponse response){

          /* InputStream in = new FileInputStream(new File(batchDO.getFileUrl()));//将该文件加入到输入流之中
        byte[] body = null;
        body = new byte[in.available()];// 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数
        in.read(body);//读入到输入流里面*/

//        response.reset();
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/x-msdownload");
        response.addHeader("Content-Disposition", "attachment;filename=" + fileName);

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        try {
            // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
            OSSObject ossObject  = ossClient.getObject(bucketName, filePath);

            BufferedInputStream input = new BufferedInputStream(ossObject.getObjectContent());
            byte[] buffBytes = new byte[1024];
            OutputStream outputStream  = response.getOutputStream();
            int read = 0;
            while ((read = input.read(buffBytes)) != -1) {
                outputStream.write(buffBytes, 0, read);
            }
            outputStream.flush();

            // ossObject对象使用完毕后必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
            ossObject.close();

        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (Throwable ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }

    }

}

下载:流式下载 - 对象存储 OSS - 阿里云

 @GetMapping("/file/downLoad")
    @ResponseBody
    public void downLoad(@NotBlank(message = "批次id不能为空") String batchNo, HttpServletResponse response) {
        batchBizManager.downloadFile(batchNo,response);
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

oss文件上传与下载 的相关文章

  • Netbeans 8.1 Gnome 3 GTK+ UI 字体和选项卡高度

    我刚刚在运行 GNOME 3 桌面的 Ubuntu 16 04 上安装了 NetBeans 8 1 如果可能的话 我想继续使用 IDE 的 GTK 外观和感觉 但 UI 上的字体 尤其是选项卡中的字体 太小且重叠 我尝试添加 fontsiz
  • Java:扩展类并实现具有相同方法的接口

    可能无法完成以下操作 我收到编译错误 继承的方法 A doSomthing int 无法隐藏 B 中的公共抽象方法 public class A int doSomthing int x return x public interface
  • TreeMap 删除所有大于某个键的键

    在项目中 我需要删除键值大于某个键的所有对象 键类型为Date 如果重要的话 据我所知TreeMapJava中实现的是红黑树 它是一种二叉搜索树 所以我应该得到O n 删除子树时 但除了制作尾部视图并一一删除之外 我找不到任何方法可以做到这
  • Java Logger 未记录到 Netbeans 中的输出

    我正在 Netbeans 中使用 Maven 启动一个 Java 项目 我编写了一些代码来使用 Logger 类进行日志记录 但是 日志记录似乎不起作用 在程序开始时 我运行 Logger getLogger ProjectMainClas
  • java.lang.ClassNotFoundException:javax.mail.MessagingException

    我想使用 eclipse 将电子邮件从我的 gmail 帐户发送到另一个邮件帐户 我使用 apache tomcat 7 0 34 作为我的 Web 服务器 并使用端口 8080 作为 apache 服务器 HTTP 1 1 并使用 JRE
  • 如何在java中将数组值排序为循环格式?

    我的数组值如下 String value 1 2 3 4 5 6 7 8 9 10 假设如果我将值 5 传递给 tat 数组 它应该按如下顺序排序 5 6 7 8 9 10 1 2 3 4 怎么办 有人帮忙吗 感谢你 你需要的就是所谓的轮换
  • 两个整数乘积的模

    我必须找到c c a b mod m a b c m 是 32 位整数 但 a b 可以超过 32 位 我正在尝试找出一种计算 c 的方法 而不使用 long 或任何 gt 32 位的数据类型 有任何想法吗 如果m是质数 事情可以简化吗 注
  • eclipse行号状态行贡献项是如何实现的?

    我需要更新状态行编辑器特定的信息 我已经有了自己的实现 但我想看看 eclipse 贡献项是如何实现的 它显示状态行中的行号 列位置 谁能指点一下 哪里可以找到源代码 提前致谢 亚历克斯 G 我一直在研究它 它非常复杂 我不确定我是否了解完
  • 为什么即使我的哈希码值相同,“==”也会返回 false

    我写了一个像这样的课程 public class HashCodeImpl public int hashCode return 1 public static void main String args TODO Auto generat
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • 如何检查某个元素是否存在于一组项目中?

    In an ifJava中的语句如何检查一个对象是否存在于一组项目中 例如 在这种情况下 我需要验证水果是苹果 橙子还是香蕉 if fruitname in APPLE ORANGES GRAPES Do something 这是一件非常微
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • 如何区分从 Saxon XPathSelector 返回的属性节点和元素节点

    给定 XML
  • 部署 .war 时出现 Glassfish 服务器错误:部署期间发生错误:准备应用程序时出现异常:资源无效

    我正在使用以下内容 NetBeans IDE 7 3 内部版本 201306052037 爪哇 1 7 0 17 Java HotSpot TM 64 位服务器虚拟机 23 7 b01 NetBeans 集成 GlassFish Serve
  • 将 JScrollPane 添加到 JFrame

    我有一个关于向 Java 框架添加组件的问题 我有一个带有两个按钮的 JPanel 和一个添加了 JTable 的 JScrollPane 我想将这两个添加到 JFrame 中 我可以将 JPanel 添加到 JFrame 或将 JScro
  • 列表过滤器内的 Java 8 lambda 列表

    示例 JSON id 1 products id 333 status Active id 222 status Inactive id 111 status Active id 2 products id 6 status Active
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何

随机推荐

  • setImageResource和setImageDrawable区别

    ImageView设置图片的方式有很多钟 可以在xml里面写android src drawable xxx 也可以在java代码里面设置 在java里面的设置方式也有多种 方法包括 setImageResource setImageDra
  • Xilinx ISE系列教程(3):关联第三方编辑器Notepad++/VS Code/UltraEdit/Sublime Text/Emacs/Vim

    文章目录 toc 1 ISE关联Notepad 编辑器 2 ISE关联VS Code编辑器 3 ISE关联UltraEdit编辑器 4 ISE关联Sublime Text3编辑器 5 ISE关联Emacs编辑器 6 ISE关联Vim编辑器
  • VMware中Centos Linux 8虚拟机安装过程

    VMware Workstation的安装过程已经有博文分享 本文是VMware安装成功后虚拟机安装的过程 在安装前需要下载CentOS镜像文件 阿里云地址为 https mirrors aliyun com centos 我下载的是8 即
  • 下载百度网盘资源不限速的两种方法

    下载百度网盘资源不限速的两种方法 方法1 适合文件大小4g以下的下载 由于直接用proxpee down下载资源文件时出现 error code 31090 error msg package is too large request id
  • 神仙文献管理软件Mendeley 保姆级教程

    神仙文献管理软件Mendeley 保姆级教程 英国文文的文章 知乎 https zhuanlan zhihu com p 65992720 Mendeley是一款Elsevier公司旗下的免费文献管理软件 集文献的搜集 管理 搜索 阅读 标
  • 云计算与大数据-虚拟化与容器技术题库

    第2章 虚拟化与容器技术习题 2 1 选择题 1 典型的虚拟化架构不包括 D A 宿主机操作系统 B 虚拟机 C 虚拟化层 D 虚拟内存 2 虚拟化技术的研究目的包括 D A 降低管理成本 B 增强可移植性 C 提高软件开发效率 D 以上都
  • 用java PreparedStatement就不用担心sql注入了吗?

    http www cnblogs com iyangyuan archive 2015 09 15 4809494 html 用java PreparedStatement就不用担心sql注入了吗 言归正传 对java有了解的同学基本上都体
  • Flutter 画笔(Paint)、drawRect(绘制矩形)、PaintingStyle

    观察走在你前面的人 看看他为何领先 学习他的做法 drawRect rect paint rect 矩形 paint 画笔 PaintingStyle fill 用画笔填充绘制 Rect fromCircle Offset center d
  • 用JAVA语言实现赛马游戏

    在大二下半学期 学校举办了一场编程比赛 其中一个选题就是 用JAVA语言实现一个赛马游戏程序 此程序即为当时的参赛完成的程序 程序界面风格在当时的情况下来看 算是比较美观的 但是 遗憾的是当时笔者对程序体系的认识有限 将数据库连接部分的代码
  • VMware修复Ubuntu启动不了问题

    VMware修复Ubuntu启动不了问题 最近在VMware 虚拟机里面安装了Ubuntu10 10 安装配置Eclipse Android SDK 无奈修改系统配置参数后启动不了 只好通过iso安装文件启动进入原来的系统进行修复 把这个过
  • Chrome自动运行Js去广告,利用插件网页自动运行Js脚本,油猴去广告教程【去处指定部位的广告】

    免自写代码去除广告 点击即可安装 点此去向去除广告的油猴脚本 以下是教学如何自己写油猴脚本删除指定广告的 目的页面 https m dmzj com view 33353 61162 html 可以看到由这两个网页元素组成了网页广告 一个灰
  • keras和tensorflow的匹配版本

    keras和tensorflow版本之间的匹配是非常重要的 因为它们之间的兼容性可能存在一些问题 以下是一些keras和tensorflow之间的匹配版本 tensorflow 1 x keras是tensorflow 1 x的一部分 可以
  • git Tag标签/Android studio git创建与删除标签(Tag)

    fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff一
  • unity3d 脚本参考-技术文档

    unity3d 脚本参考 技术文档 核心提示 一 脚本概览这是一个关于Unity内部脚本如何工作的简单概览 Unity内部的脚本 是通过附加自定义脚本对象到游戏物体组成的 在脚本对象内部不同志的函数被特定的事件调用 最常用的列在下面 Upd
  • 用ue5写一个根据数据更换标签图片的蓝图

    在 Unreal Engine 5 UE5 中 您可以使用蓝图来实现根据数据更换标签图片的功能 以下是一个示例蓝图 其中包含了您可能需要使用的各种节点 首先 您需要获取数据 例如使用 变量 节点获取变量或使用 从全局变量获取 节点获取全局变
  • arduino-esp32-cam环境配置和例程使用

    如果想要深度开发 请使用esp idf开发 自由度更高 同时也比较复杂 我的主要目的是模块到手后快速上手评测 检查模块是否可以使用 一 硬件准备 1 aithinker esp32 cam模块一个 2 usb转串口模块 比如ch340 cp
  • Ubuntu linux 手动编译安装 Realtek 8852 无线网卡驱动 非常简单 添加Manjaro教程

    由于8852是刚出的支持wifi6的无线网卡 因此只有Windows驱动 而Linux 用只能自己编译驱动 好在不麻烦 本驱动置只支持5 4及以上内核 请确认 安装必要工具 sudo apt get update sudo apt get
  • np.mgrid的含义及reshape(2,-1)等

    np mgrid的含义及reshape 2 1 等 np mgrid np mgrid 介于网上很多教程只是单纯说用法 而对其意思解释不清楚 因此写了该释义 np mgrid中含有grid 网格 顾名思义 功效与网格相关 先看官方解释 废话
  • Linux查看系统基本信息,版本信息(最全版)

    Linux下如何查看版本信息 包括位数 版本信息以及CPU内核信息 CPU具体型号 1 uname a Linux查看版本当前操作系统内核信息 2 cat proc version Linux查看当前操作系统版本信息 3 cat etc i
  • oss文件上传与下载

    上传 如何使用流式上传和文件上传方式上传文件 对象存储 OSS 阿里云 package com vazyme kf client aliyun oss manager import com aliyun oss ClientExceptio