java aliyun oss上传和下载工具类

java aliyun oss上传和下载工具类

依赖

        <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.8.0</version></dependency>

工具类


import com.alibaba.fastjson.JSON;
import com.aliyun.oss.HttpMethod;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;
import java.util.HashMap;
import java.util.Objects;
import java.util.UUID;@Component
@Slf4j
public class OssUtil {@Value("${aa.endpoint}")private String endpoint;@Value("${aa.accessKeyId}")private String accessKeyId;@Value("${aa.accessKeySecret}")private String accessKeySecret;@Value("${aa.bucketName}")private String bucketName;@Value("${aa.callbackPath}")private String callbackPath;public String uploadSingleFile(File file, String fileName) {String uploadedFileUrl = "";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);PutObjectRequest putObjectRequest = new PutObjectRequest("plant-device", fileName, file);// 上传文件。PutObjectResult result = ossClient.putObject(putObjectRequest);System.out.println("Ali-Oss-PutObjectResult --->" + JSON.toJSONString(result));if (null != result && StringUtils.isNotBlank(result.getETag())) {uploadedFileUrl = callbackPath + "/" + fileName;}ossClient.shutdown();return uploadedFileUrl;}public void downloadFile(String filename, HttpServletResponse response) throws Exception {ServletOutputStream out =null;ByteArrayOutputStream baos = null;InputStream inputStream = null;OSS ossClient = null;String encodeFileName = URLEncoder.encode(filename);try{// 创建OSSClient实例。ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 100);GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, filename, HttpMethod.GET);// 设置过期时间。request.setExpiration(expiration);// 生成签名URL(HTTP GET请求)。URL signedUrl = ossClient.generatePresignedUrl(request);// 使用签名URL发送请求。OSSObject ossObject = ossClient.getObject(signedUrl, new HashMap<>());if (ossObject != null) {inputStream = ossObject.getObjectContent();//获取response输出流out = response.getOutputStream();byte[] buffer = new byte[1024];int len;baos = new ByteArrayOutputStream();while ((len=inputStream.read(buffer))!=-1){baos.write(buffer,0,len);}//设置允许跨域的keyresponse.setHeader("Access-Control-Expose-Headers", "Content-Disposition");//文件名有“,”等特殊字符发送到前端会报错,用""括起来解决response.addHeader("Content-Disposition", "attachment;filename=\"" + encodeFileName+"\"");//设置文件大小response.addHeader("Content-Length", "" + baos.size());//设置文件名,避免问题,这个也用""括起来response.setHeader("filename", "\"" + encodeFileName+"\"");//设置文件类型response.setContentType("application/octet-stream");//向前端返回文件流out.write(baos.toByteArray());}}catch (Exception e){e.printStackTrace();log.error("downloadFile error:"+e.getMessage());throw e;}finally {try{if(null!= baos){baos.flush();}if(null!= out){out.flush();}if(null!= response){response.flushBuffer();}if(null!= baos){baos.close();}if(null!= out){out.close();}if(null!= ossClient){ossClient.shutdown();}}catch (Exception e){e.printStackTrace();log.error(e.getMessage());}}}public String uploadSingleFile(MultipartFile file, InputStream instream) {long dd1 = new Date().getTime();if (Objects.isNull(file)) {return null;}try {// 获取图片名字String fileName = file.getOriginalFilename().replaceAll(" ", "");log.info("===========" + fileName);String fileTyle = fileName.substring(fileName.lastIndexOf("."), fileName.length());System.out.println(fileTyle);fileName = UUID.randomUUID().toString().replaceAll("-", "") + fileTyle;// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, instream);// 设置URL过期时间为100年,默认这里是int型,转换为long型即可Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 100);URL url = ossClient.generatePresignedUrl(bucketName, fileName, expiration);// 关闭OSSClient。ossClient.shutdown();instream.close();//公有设置long dd2 = new Date().getTime();System.out.println("========OSS 相应时间=======" + ((dd1 - dd2) / 1000) + "秒========");return callbackPath + "/" + URLEncoder.encode(fileName, "UTF-8");} catch (Exception e) {e.printStackTrace();} finally {try {if (instream != null) {instream.close();}} catch (IOException e) {e.printStackTrace();}}return null;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/24084.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Threejs-04、物体的缩放与旋转

1、物体的缩放 因为物体的scale属性是vector对象,因此按照vector的属性和方法,设置x/y/z轴的缩放大小 //例如设置x轴放大3倍、y轴方向放大2倍、z轴方向不变 cube.scale.set(3, 2, 1); //单独设置某个轴的缩放 cube.scale.x = 32、物体设置旋转 因为的旋转通过设置rotation属性…

国自然和毕业论文的流程图用这个格式导入Word可无限放大

AI编辑的图片导出EMF格式可直接插入Word和PPT中 可无限放大 不推荐WMF&#xff0c;导入word可能会发生格式变化 还可在PPT中去除分组再编辑

MIPS极简史:风雨40年,两度IPO六次被收购,读后感

昨天在网上搜了mips&#xff0c;搜到了这篇文章。花时间读完了这篇文章。 mips将重点放在了pc和服务器上&#xff0c;竞争对手是intel和amd&#xff0c;mips没有竞争过这两家公司。整个历程充满坎坷。 这篇文章的两段原文如下&#xff1a; Wave Computing Inc.时运不济&…

ceph radosgw 原有zone placement信息丢失数据恢复

概述 近期遇到一个故障环境&#xff0c;因为某些原因&#xff0c;导致集群原有zone、zonegroup等信息丢失&#xff08;osd&#xff0c;pool等状态均健康&#xff09;。原有桶和数据无法访问&#xff0c;经过一些列fix后修复&#xff0c; 记录过程 恢复realm和pool相关信息 重…

我找到了全网最低价买服务器的 bug !!!

拍断大腿 周五&#xff0c;放松一下&#xff0c;给大家分享下我最近的事儿&#xff0c;以及带大家薅个&#xff08;可能会有&#xff09;的羊毛。 上个月&#xff0c;家里买了 Apple TV&#xff08;可理解为苹果的电视盒子&#xff09;装了 infuse&#xff08;一个在电视盒子上…

宝兰德应用服务器软件通过保险业信息技术应用创新攻关实验室产品适配测试认证

近期&#xff0c;宝兰德中间件核心产品「应用服务器软件 V9.5.5」&#xff08;以下简称&#xff1a;应用服务器软件&#xff09;顺利通过了保险业信息技术应用创新攻关实验室产品适配测试。标志着宝兰德应用服务器软件符合信息技术产品适配要求&#xff0c;能够全面支持金融保险…

读python、pytorch代码时代码函数记录

在读取pytorch训练代码时&#xff0c;作为小白的自己&#xff0c;总是碰到一些没用过的函数和语法&#xff0c;这里记录学习下&#xff1a; os.sep:跨平台路径分隔符,在Python中&#xff0c;os模块提供了一些与操作系统交互的功能&#xff0c;其中os.sep是一个非常重要的属性。…

Python语言字母:深度解析与魅力探索

Python语言字母&#xff1a;深度解析与魅力探索 Python&#xff0c;作为一种广泛使用的编程语言&#xff0c;其字母背后蕴含着丰富的内涵和深厚的魅力。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入剖析Python语言字母所蕴含的秘密和魅力&#xff0c;带您…

解决CentOS 7无法识别ntfs的问题

解决CentOS 7无法识别ntfs的问题 方式一&#xff1a; Centos默认不支持ntfs文件格式&#xff0c;直接在Centos7上插U盘或移动硬盘无法识别&#xff0c;安装 ntfs-3g即可&#xff1a; # yum install epel-release -y # yum install ntfs-3g -y[rootbogon ~]# rpm -qa | grep nt…

系统与软件工程软件测试设计技术

测试设计技术包含基于规格说明书的技术&#xff0c;基于结构的技术&#xff0c;基于经验的技术三大项。 一 基于规格说明书的技术&#xff1a; 1.1 等价类划分 等价类划分使用测试项模型将测试项输入和输出划分为等价类(也称为“分区”)&#xff0c;其中每个等价类都应当作为…

由于找不到 XXX.dll,无法继续执行代码。重新安装程序可能会解决此问题——解决方案

由于找不到 XXX.dll&#xff0c;无法继续执行代码。重新安装程序可能会解决此问题——解决方案 一、问题描述 之前项目都是在Ubuntu操作系统下完成&#xff0c;进行的很顺利。由于我没有Linux物理机&#xff0c;每次都要打开虚拟机感觉挺麻烦的&#xff0c;我就想着把在Linux上…

LaneKeepingEnv(自动驾驶仿真)

LaneKeepingEnv环境的工作原理可以归纳如下&#xff1a; 初始化阶段&#xff1a; 环境在创建时&#xff0c;会调用__init__方法进行初始化。初始化过程中&#xff0c;会设置一些关键的属性&#xff0c;如lane&#xff08;当前车道&#xff09;、lanes&#xff08;所有车道的列…

中国版Wayve决战端到端,等待数据的大力出奇迹

作者 |王博 编辑 |德新 「人工智能的定律只有一个&#xff0c;就是规模定律&#xff08;Scaling Law&#xff09;&#xff0c;大力出奇迹。端到端是描述方式&#xff0c;更应该去考虑如何去生产更多的自动驾驶合适的数据&#xff0c;来喂养更大更合适的模型&#xff0c;取得更…

zeppelin(kylin的可视化界面安装)(从头到尾安装)

zeppelin(kylin的可视化界面安装) 1、zeppelin安装前的准备工作&#xff1a; 1、虚拟机安装配置好jdk&#xff0c; 2、虚拟机安装配置好Hadoop&#xff0c; 3、虚拟机安装配置好Hive 4、虚拟机安装配置了hbase 5、安装了kylin&#xff08;麒麟&#xff09; 6、下载了zeppelin…

小程序域名怎么配置?三步教您配置

小程序域名怎样配置&#xff1f;在当今数字化时代&#xff0c;小程序已成为企业展示品牌形象、提供便捷服务的重要渠道。然而&#xff0c;许多开发者在搭建小程序时&#xff0c;都会遇到服务器域名配置的问题。今天&#xff0c;我们将为您揭秘小程序服务器域名配置的小tip&…

C语言野指针、规避野指针、assert宏断言

目录 a.野指针成因 1.指针未初始化 2.指针越界访问 3.指针指向的空间释放 b.规避野指针 1.指针初始化 2.小心指针越界 3.指针变量不再使用时&#xff0c;及时置NULL&#xff0c;指针使用之前检查有效性 4.避免返回局部变量的地址 c.assert宏断言的使用 概念&#xff1…

【MySQL】SQL通用语法

【MySQL】SQL通用语法 SQL是结构化查询语言&#xff08;Structured Query Language&#xff09;的缩写&#xff0c;是一种专门用来管理和操作关系型数据库的标准化语言。SQL能够实现数据库的创建、查询、更新和删除操作&#xff0c;以及对数据进行存储、检索和管理。通过SQL语句…

串口屏在焊接机上的应用

在现代工业自动化浪潮中&#xff0c;焊接技术作为制造业的脊梁&#xff0c;其精准与效率直接关系到产品的质量和生产线的流畅性。而在这场技术的革新中&#xff0c;串口屏以其独特的优势&#xff0c;正成为焊接机领域的璀璨明星。今天&#xff0c;就让我们一同探索串口屏如何助…

动手学深度学习28 批量归一化

动手学深度学习28 批量归一化 批量归一化代码从零实现调包简洁实现 QA https://www.bilibili.com/video/BV1X44y1r77r/?spm_id_fromautoNext&vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 批量归一化 n个比较小的数相乘&#xff0c;值会越来越小。 批量归一化&#xff1a;…

opencv-python(四)

读取图像文件 image cv2.imread(path, flag) flag&#xff1a;1. 默认值&#xff0c;依原图像读取图像&#xff0c;保留Alpha透明度通道。2.IMREAD_GRAYSCALE&#xff1a;将图像转为灰度再读取。3.IMREAD_COLOR&#xff1a;将图像转为三通道BGR彩色再读取。 可读取的图像格…