利用阿里云OSS对文件进行存储,上传等操作
--pom.xml加入阿里OSS存储依赖 <!--阿里云OSS存储--> <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>2.8.3</version> </dependency>
--配置阿里云oss相关常量参数
/** @Author: xxxx @Description: ${description} 阿里云 constant @Date: 2020/11/26 14:15 */
public class AliyunOSSConfigConstant {// 私有构造方法 禁止该类初始化private AliyunOSSConfigConstant() {}// 仓库名称public static final String BUCKET_NAME ="your backetname";// 地域节点public static final String END_POINT ="your endpoint address";// AccessKey ID 阿里云AccessKeypublic static final String AccessKey_ID ="your accesskeyid";// Access Key Secret 阿里云Secretpublic static final String AccessKey_Secret ="your acesskeySecret";
}
--编写操作oss的工具类
/** @Author: xxxx @Description: ${description}阿里云OSS工具类 @Date: 2020/11/26 14:13 */
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import com.stdl.chargingpile.config.constant.Constants;
import com.stdl.chargingpile.service.OrderService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.net.URL;
import java.util.Date;
import java.util.List;
import java.util.Random;public class AliyunOSSUtil {@Autowired private OrderService orderService2;String filedir="img/";private static final Logger logger = LoggerFactory.getLogger(AliyunOSSUtil.class);/*** 删除一个Bucket和其中的Objects** @param client* @param bucketName* @throws OSSException* @throws ClientException*/public static void deleteBucket(OSSClient client, String bucketName)throws OSSException, ClientException {ObjectListing ObjectListing = client.listObjects(bucketName);List<OSSObjectSummary> listDeletes = ObjectListing.getObjectSummaries();for (int i = 0; i < listDeletes.size(); i++) {String objectName = listDeletes.get(i).getKey();// 如果不为空,先删除bucket下的文件client.deleteObject(bucketName, objectName);}client.deleteBucket(bucketName);}/*** 把Bucket设置为所有人可读** @param client* @param bucketName* @throws OSSException* @throws ClientException*/public static void setBucketPublicReadable(OSSClient client, String bucketName)throws OSSException, ClientException {// 创建bucketclient.createBucket(bucketName);// 设置bucket的访问权限,public-read-write权限client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);}/*** 上传文件** @param client* @param bucketName* @param key* @param filename* @param contentType default "image/gif"* @throws OSSException* @throws ClientException* @throws FileNotFoundException*/public static String uploadFile(OSSClient client, String bucketName, String key, String filename, String contentType)throws OSSException, ClientException, FileNotFoundException {File file = new File(filename);contentType = contentType == null ? "image/gif" : contentType;ObjectMetadata objectMeta = new ObjectMetadata();objectMeta.setContentLength(file.length());objectMeta.setContentType(contentType);InputStream input = new FileInputStream(file);PutObjectResult result = client.putObject(bucketName, key, input, objectMeta);return result.getETag();}/*** 下载文件** @param client* @param bucketName* @param key* @param filename* @throws OSSException* @throws ClientException*/public static void downloadFile(OSSClient client, String bucketName, String key, String filename)throws OSSException, ClientException {client.getObject(new GetObjectRequest(bucketName, key), new File(filename));}/*** 创建一个文件夹** @param client* @param bucketName* @param folderPah*/public static void createFolder(OSSClient client, String bucketName, String folderPah) {ObjectMetadata objectMeta = new ObjectMetadata();byte[] buffer = new byte[0];ByteArrayInputStream in = new ByteArrayInputStream(buffer);objectMeta.setContentLength(0);try {client.putObject(bucketName, folderPah, in, objectMeta);} catch (Exception e) {e.printStackTrace();} finally {try {in.close();} catch (IOException e) {e.printStackTrace();}}}/*** 删除一个OSS文件对象** @param client* @param bucketName* @param key*/public static void deleteObject(OSSClient client, String bucketName, String key) {client.deleteObject(bucketName, key);}public static String reFundPath(String mechNo){String certpath = TMP_DIR + File.separator + mechNo;boolean dirs = createDir(certpath);if(dirs==true){OSSClient client =new OSSClient(Constants.endpoint, accessKeyId, accessKeySecret);downloadFile(client,Constants.bucket,mechNo+"/apiclient_cert.p12",certpath + File.separator + "apiclient_cert.p12");}System.out.println(certpath + File.separator + "apiclient_cert.p12");return certpath;}/*** 获取系统临时目录*/private static final String TMP_DIR= System.getProperty("java.io.tmpdir");public static boolean createDir(String destDirName) {File dir = new File(destDirName);if (dir.exists()) {System.out.println("创建目录" + destDirName + "目标目录已经存在,无需重新创建");return true;}if (!destDirName.endsWith(File.separator)) {destDirName = destDirName + File.separator;}// 创建目录if (dir.mkdirs()) {System.out.println("创建目录" + destDirName + "成功!");return true;} else {System.out.println("创建目录" + destDirName + "失败!");return false;}}/**** 上传图片* @param file* @return*/public String uploadImg2Oss(MultipartFile file) {if (file.getSize() > 1024 * 1024 *20) {return "图片太大";//RestResultGenerator.createErrorResult(ResponseEnum.PHOTO_TOO_MAX);}String originalFilename = file.getOriginalFilename();String substring = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();Random random = new Random();String name = random.nextInt(10000) + System.currentTimeMillis() + substring;try {InputStream inputStream = file.getInputStream();this.uploadFile2OSS(inputStream, name);return name;//RestResultGenerator.createSuccessResult(name);} catch (Exception e) {return "上传失败";//RestResultGenerator.createErrorResult(ResponseEnum.PHOTO_UPLOAD);}}/*** 上传图片获取fileUrl* @param instream* @param fileName* @return*/private String uploadFile2OSS(InputStream instream, String fileName) {String ret = "";try {//创建上传Object的MetadataObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentLength(instream.available());objectMetadata.setCacheControl("no-cache");objectMetadata.setHeader("Pragma", "no-cache");objectMetadata.setContentType(getContentType(fileName.substring(fileName.lastIndexOf("."))));objectMetadata.setContentDisposition("inline;filename=" + fileName);//上传文件OSSClient ossClient = new OSSClient(Constants.endpoint, accessKeyId, accessKeySecret);PutObjectResult putResult = ossClient.putObject(bucket, filedir + fileName, instream, objectMetadata);ret = putResult.getETag();} catch (IOException e) {logger.error(e.getMessage(), e);} finally {try {if (instream != null) {instream.close();}} catch (IOException e) {e.printStackTrace();}}return ret;}public static String getContentType(String FilenameExtension) {if (FilenameExtension.equalsIgnoreCase(".bmp")) {return "image/bmp";}if (FilenameExtension.equalsIgnoreCase(".gif")) {return "image/gif";}if (FilenameExtension.equalsIgnoreCase(".jpeg") ||FilenameExtension.equalsIgnoreCase(".jpg") ||FilenameExtension.equalsIgnoreCase(".png")) {return "image/jpg";}if (FilenameExtension.equalsIgnoreCase(".html")) {return "text/html";}if (FilenameExtension.equalsIgnoreCase(".txt")) {return "text/plain";}if (FilenameExtension.equalsIgnoreCase(".vsd")) {return "application/vnd.visio";}if (FilenameExtension.equalsIgnoreCase(".pptx") ||FilenameExtension.equalsIgnoreCase(".ppt")) {return "application/vnd.ms-powerpoint";}if (FilenameExtension.equalsIgnoreCase(".docx") ||FilenameExtension.equalsIgnoreCase(".doc")) {return "application/msword";}if (FilenameExtension.equalsIgnoreCase(".xml")) {return "text/xml";}return "image/jpg";}/*** 获取图片路径* @param fileUrl* @return*/public String getImgUrl(String fileUrl) {if (!StringUtils.isEmpty(fileUrl)) {String[] split = fileUrl.split("/");String url = this.getUrl(this.filedir + split[split.length - 1]);return url;}return null;}/*** 获得url链接** @param key* @return*/public String getUrl(String key) {// 设置URL过期时间为10年 3600l* 1000*24*365*10Date expiration = new Date(new Date().getTime() + 3600L * 1000 * 24 * 365 * 10);// 生成URLOSSClient ossClient = new OSSClient(Constants.endpoint, accessKeyId, accessKeySecret);URL url = ossClient.generatePresignedUrl(bucket, key, expiration);if (url != null) {return url.toString();}return null;}/*** 多图片上传* @param fileList* @return*/public String checkList(List<MultipartFile> fileList) {String fileUrl = "";String str = "";String photoUrl = "";for(int i = 0;i< fileList.size();i++){fileUrl = uploadImg2Oss(fileList.get(i));str = getImgUrl(fileUrl);if(i == 0){photoUrl = str;}else {photoUrl += "," + str;}}return photoUrl.trim();}/*** 单个图片上传* @param file* @return*/public String checkImage(MultipartFile file){String fileUrl = uploadImg2Oss(file);String str = getImgUrl(fileUrl);return str.trim();}
}
以上就是操作阿里OSS的相关方法,供大家学习参考交流~!
利用阿里云OSS对文件进行存储,上传等操作相关推荐
- 阿里云OSS域名配置及简单上传
目前开发系统,附件文件一般都会使用第三方的存储空间来保存,一方面是为了开发者提供便利,另一方可以减轻系统的访问压力,下面介绍一下阿里云的OSS的一些简单配置和使用. 一.阿里云OSS配置 前提:你需要 ...
- filezilla:阿里云 win10 服务器文件传输(上传和下载)的配置教程
报错截图: (截图省略)因为基本上都是下面的问题. 下面的问题又和本文解决办法无关,罗列出来仅仅是告诉大家,这个基本上都可以忽视. 真正解决问题的办法:还是filezillad 远程链接时的定义设置选 ...
- 使用阿里云OSS完成文件的上传样例
使用阿里云OSS完成文件的上传 基础条件: 提前注册过阿里云账户 账户里有余额(文件上传按流量收费) 开通过OSS的基础服务 如果有以上基础条件不满足的小伙伴,去度娘了解一下. 前言 有过基础的小伙伴 ...
- 使用阿里云OSS实现文件上传
概述场景 文件上传,是程序开发中必须会使用到的一个功能,比如: 添加商品,用户头像,文章封面等需求 富文本编辑(插件文件上传) 文件上传的原理是什么? 我们为什么要实现文件上传,其实就要共享资源,大家 ...
- 阿里云OSS视频文件迁移视频点播,并导出媒资excel表
阿里云OSS视频文件迁移视频点播,并导出媒资excel表 一 介绍 1 OSS 是什么 2 视频点播是什么 3 制作背景 阿里云磁盘(读文件) 阿里云点播(写文件) 阿里云sdk导入依赖 二 流程 1 ...
- 小程序配置阿里云OSS下载文件,在请求头里配置生成强制下载链接,(拿到下载链接可以下载文件至本地)
小程序配置阿里云OSS下载文件,在请求头里配置生成强制下载链接,(拿到下载链接可以下载文件至本地)(Win10电脑开发环境)**这里只说明小程序端问题**<菜鸡总结大神勿喷!蟹蟹~> 大体 ...
- springboot整合阿里云视频点播服务Vod——实现视频上传、删除、播放
视频点播(ApsaraVideo VoD,简称VoD)是集视频采集.编辑.上传.媒体资源管理.自动化转码处理(窄带高清™).视频审核分析.分发加速于一体的一站式音视频点播解决方案. 阿里云视频点播服务 ...
- Java调用阿里云OSS下载文件
1.准备工作 具体细节参考Java调用阿里云oss_迷途知返-的博客-CSDN博客_java使用阿里云oss. 2.项目需求 我这里只需要根据文件名称把文件从oss下载下来即可,参考阿里云官网指导:下 ...
- 阿里云oss(图片存储)--fastdfs (视频存储)
技术点总结: 注入OSSClient和配置类,文件格式的判断------通过入参获取到图片的文件名称,------ 在通过图片文件名称获取到自定义新的文件图片的名称----调用putObject() ...
最新文章
- Android Studio:创建类时,添加作者名和日期
- PyQt5 技术篇-透明窗口设置方法,窗口透明度的设置
- Win32 API、VC++、C# 文件操作函数的初步比较
- linux重启查看日志及历史记录 查询原因
- git push代码出现push rejected错误
- 剑英的区块链学习手记(一)
- 多线程join,强制执行完
- 解决Some index files failed to download.They have been ignored, or old ones used instead报错
- Python 模块学习
- ctfshow-WEB-web4
- ASP.NET动态加载用户控件的页面生成过程
- 如何恢复快捷方式上的小箭头
- 最新emoji表情代码大全_2019七夕节最新撩妹句子大全,浪漫的七夕节表情包集锦...
- bios 昂达h61c_Onda昂达主板BIOS,ONDA昂达H61N全固版(ver 3.00)主板BIOS 3.02版,主板BIOS,硬件驱动下载...
- resnet152训练_ResNet改进版来了!可训练网络超过3000层!相同深度精度更高
- 新版火狐打开时会自动开启360导航
- 基于Android的个人时间管理设计与开发
- Longest Increasing Subsequence
- 【论文整理】风格迁移中格拉姆矩阵(Gram Matrix)的使用
- [重要笔记]网络信号在网线和集线器中传输
热门文章
- python综合管理系统_Python-20 (信息系统-框架/循环/增删/综合应用)
- STL源码剖析 Set相关算法 并集 set_union|交集 set_intersection|差集 set_difference |对称差集 set_symmetric_difference
- 操作系统 内存管理相关知识
- 将读写锁放到共享内存中,实现进程之间对数据的读写访问控制
- 4G发牌或提早 电信联通面临艰难抉择
- linux :Docker 方式 安装 zookeeper、阿里服务器上 Docker 运行 zookeeper
- FreeSql (三)实体特性
- 【Android开发】NDK开发(1)-Hello World!
- Linux 共享内存详解一
- Python爬虫:一些常用的爬虫技巧总结