阿里云OSS存储基于JAVA基本使用
https://blog.csdn.net/github_36086968/article/details/53113274
本篇文章希望你先看完官方的API了解一下OSS基本语法和概念再来应该比较容易懂。
- 这里给出官方的OSS API:OSS API
- 官方SDK:点击打开链接
- 官方帮助文档:点击打开链接
- OSS GitHub地址:点击打开链接
- OSS java 依赖jar包地址:点击下载
- #阿里云OSS配置
- endpoint = http://oss-cn-shenzhen.aliyuncs.com //可以选择其他的地址
- bucketName = ft-pic //已经在控制台创建的bucket
- picLocation = CDoc/cms/ //你上传文件的保存路径,如果bucket中不存在则创建(其实原理并不是文件夹,只是文件名,详情请先阅读官方文档)
- accessKeyId = *********** //相应的id和key值,请填写你具体的值,这里不方便展示我自己的。
- accessKeySecret = ************
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Properties;
- /**
- * 读取后缀名为“.properties”的文件
- * @author
- *
- */
- public class SystemConfig {
- private static final String CONFIG_PROPERTIES="config.properties";
- public static String getConfigResource(String key) throws IOException{
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
- Properties properties = new Properties();
- InputStream in = loader.getResourceAsStream(CONFIG_PROPERTIES);
- properties.load(in);
- String value = properties.getProperty(key);
- // 编码转换,从ISO-8859-1转向指定编码
- value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
- in.close();
- return value;
- }
- }
4.创建一个OSS配置类,用来方便的获取基本信息。
- /**
- * @ClassName: OSSConfig
- * @Description: OSS配置类
- * @author AggerChen
- * @date 2016年11月4日 下午3:58:36
- */
- class OSSConfig{
- private String endpoint; //连接区域地址
- private String accessKeyId; //连接keyId
- private String accessKeySecret; //连接秘钥
- private String bucketName; //需要存储的bucketName
- private String picLocation; //图片保存路径
- public OSSConfig() {
- try {
- this.endpoint = SystemConfig.getConfigResource("endpoint");
- this.bucketName = SystemConfig.getConfigResource("bucketName");
- this.picLocation = SystemConfig.getConfigResource("picLocation");
- this.accessKeyId = SystemConfig.getConfigResource("accessKeyId");
- this.accessKeySecret = SystemConfig.getConfigResource("accessKeySecret");
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public String getEndpoint() {
- return endpoint;
- }
- public void setEndpoint(String endpoint) {
- this.endpoint = endpoint;
- }
- public String getAccessKeyId() {
- return accessKeyId;
- }
- public void setAccessKeyId(String accessKeyId) {
- this.accessKeyId = accessKeyId;
- }
- public String getAccessKeySecret() {
- return accessKeySecret;
- }
- public void setAccessKeySecret(String accessKeySecret) {
- this.accessKeySecret = accessKeySecret;
- }
- public String getBucketName() {
- return bucketName;
- }
- public void setBucketName(String bucketName) {
- this.bucketName = bucketName;
- }
- public String getPicLocation() {
- return picLocation;
- }
- public void setPicLocation(String picLocation) {
- this.picLocation = picLocation;
- }
- }
5.编写OSS上传工具类
- package com.fortis.cms.utils;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.UUID;
- import com.aliyun.oss.ClientException;
- import com.aliyun.oss.OSSClient;
- import com.aliyun.oss.OSSException;
- import com.aliyun.oss.model.DeleteObjectsRequest;
- import com.aliyun.oss.model.DeleteObjectsResult;
- import com.aliyun.oss.model.GenericRequest;
- import com.aliyun.oss.model.ObjectMetadata;
- import com.aliyun.oss.model.PutObjectRequest;
- /**
- *
- * @ClassName: OSSUploadUtil
- * @Description: 阿里云OSS文件上传工具类
- * @author AggerChen
- * @date 2016年11月3日 下午12:03:24
- */
- public class OSSUploadUtil {
- private static OSSConfig config = null;
- /**
- *
- * @MethodName: uploadFile
- * @Description: OSS单文件上传
- * @param file
- * @param fileType 文件后缀
- * @return String 文件地址
- */
- public static String uploadFile(File file,String fileType){
- config = config==null?new OSSConfig():config;
- String fileName = config.getPicLocation()+UUID.randomUUID().toString().toUpperCase().replace("-", "")+"."+fileType; //文件名,根据UUID来
- return putObject(file,fileType,fileName);
- }
- /**
- *
- * @MethodName: updateFile
- * @Description: 更新文件:只更新内容,不更新文件名和文件地址。
- * (因为地址没变,可能存在浏览器原数据缓存,不能及时加载新数据,例如图片更新,请注意)
- * @param file
- * @param fileType
- * @param oldUrl
- * @return String
- */
- public static String updateFile(File file,String fileType,String oldUrl){
- String fileName = getFileName(oldUrl);
- if(fileName==null) return null;
- return putObject(file,fileType,fileName);
- }
- /**
- *
- * @MethodName: replaceFile
- * @Description: 替换文件:删除原文件并上传新文件,文件名和地址同时替换
- * 解决原数据缓存问题,只要更新了地址,就能重新加载数据)
- * @param file
- * @param fileType 文件后缀
- * @param oldUrl 需要删除的文件地址
- * @return String 文件地址
- */
- public static String replaceFile(File file,String fileType,String oldUrl){
- boolean flag = deleteFile(oldUrl); //先删除原文件
- if(!flag){
- //更改文件的过期时间,让他到期自动删除。
- }
- return uploadFile(file, fileType);
- }
- /**
- *
- * @MethodName: deleteFile
- * @Description: 单文件删除
- * @param fileUrl 需要删除的文件url
- * @return boolean 是否删除成功
- */
- public static boolean deleteFile(String fileUrl){
- config = config==null?new OSSConfig():config;
- String bucketName = OSSUploadUtil.getBucketName(fileUrl); //根据url获取bucketName
- String fileName = OSSUploadUtil.getFileName(fileUrl); //根据url获取fileName
- if(bucketName==null||fileName==null) return false;
- OSSClient ossClient = null;
- try {
- ossClient = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
- GenericRequest request = new DeleteObjectsRequest(bucketName).withKey(fileName);
- ossClient.deleteObject(request);
- } catch (Exception oe) {
- oe.printStackTrace();
- return false;
- } finally {
- ossClient.shutdown();
- }
- return true;
- }
- /**
- *
- * @MethodName: batchDeleteFiles
- * @Description: 批量文件删除(较快):适用于相同endPoint和BucketName
- * @param fileUrls 需要删除的文件url集合
- * @return int 成功删除的个数
- */
- public static int deleteFile(List<String> fileUrls){
- int deleteCount = 0; //成功删除的个数
- String bucketName = OSSUploadUtil.getBucketName(fileUrls.get(0)); //根据url获取bucketName
- List<String> fileNames = OSSUploadUtil.getFileName(fileUrls); //根据url获取fileName
- if(bucketName==null||fileNames.size()<=0) return 0;
- OSSClient ossClient = null;
- try {
- ossClient = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
- DeleteObjectsRequest request = new DeleteObjectsRequest(bucketName).withKeys(fileNames);
- DeleteObjectsResult result = ossClient.deleteObjects(request);
- deleteCount = result.getDeletedObjects().size();
- } catch (OSSException oe) {
- oe.printStackTrace();
- throw new RuntimeException("OSS服务异常:", oe);
- } catch (ClientException ce) {
- ce.printStackTrace();
- throw new RuntimeException("OSS客户端异常:", ce);
- } finally {
- ossClient.shutdown();
- }
- return deleteCount;
- }
- /**
- *
- * @MethodName: batchDeleteFiles
- * @Description: 批量文件删除(较慢):适用于不同endPoint和BucketName
- * @param fileUrls 需要删除的文件url集合
- * @return int 成功删除的个数
- */
- public static int deleteFiles(List<String> fileUrls){
- int count = 0;
- for (String url : fileUrls) {
- if(deleteFile(url)){
- count++;
- }
- }
- return count;
- }
- /**
- *
- * @MethodName: putObject
- * @Description: 上传文件
- * @param file
- * @param fileType
- * @param fileName
- * @return String
- */
- private static String putObject(File file,String fileType,String fileName){
- config = config==null?new OSSConfig():config;
- String url = null; //默认null
- OSSClient ossClient = null;
- try {
- ossClient = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
- InputStream input = new FileInputStream(file);
- ObjectMetadata meta = new ObjectMetadata(); // 创建上传Object的Metadata
- meta.setContentType(OSSUploadUtil.contentType(fileType)); // 设置上传内容类型
- meta.setCacheControl("no-cache"); // 被下载时网页的缓存行为
- PutObjectRequest request = new PutObjectRequest(config.getBucketName(), fileName,input,meta); //创建上传请求
- ossClient.putObject(request);
- url = config.getEndpoint().replaceFirst("http://","http://"+config.getBucketName()+".")+"/"+fileName; //上传成功再返回的文件路径
- } catch (OSSException oe) {
- oe.printStackTrace();
- return null;
- } catch (ClientException ce) {
- ce.printStackTrace();
- return null;
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- return null;
- } finally {
- ossClient.shutdown();
- }
- return url;
- }
- /**
- *
- * @MethodName: contentType
- * @Description: 获取文件类型
- * @param FileType
- * @return String
- */
- private static String contentType(String fileType){
- fileType = fileType.toLowerCase();
- String contentType = "";
- switch (fileType) {
- case "bmp": contentType = "image/bmp";
- break;
- case "gif": contentType = "image/gif";
- break;
- case "png":
- case "jpeg":
- case "jpg": contentType = "image/jpeg";
- break;
- case "html":contentType = "text/html";
- break;
- case "txt": contentType = "text/plain";
- break;
- case "vsd": contentType = "application/vnd.visio";
- break;
- case "ppt":
- case "pptx":contentType = "application/vnd.ms-powerpoint";
- break;
- case "doc":
- case "docx":contentType = "application/msword";
- break;
- case "xml":contentType = "text/xml";
- break;
- case "mp4":contentType = "video/mp4";
- break;
- default: contentType = "application/octet-stream";
- break;
- }
- return contentType;
- }
- /**
- *
- * @MethodName: getBucketName
- * @Description: 根据url获取bucketName
- * @param fileUrl 文件url
- * @return String bucketName
- */
- private static String getBucketName(String fileUrl){
- String http = "http://";
- String https = "https://";
- int httpIndex = fileUrl.indexOf(http);
- int httpsIndex = fileUrl.indexOf(https);
- int startIndex = 0;
- if(httpIndex==-1){
- if(httpsIndex==-1){
- return null;
- }else{
- startIndex = httpsIndex+https.length();
- }
- }else{
- startIndex = httpIndex+http.length();
- }
- int endIndex = fileUrl.indexOf(".oss-");
- return fileUrl.substring(startIndex, endIndex);
- }
- /**
- *
- * @MethodName: getFileName
- * @Description: 根据url获取fileName
- * @param fileUrl 文件url
- * @return String fileName
- */
- private static String getFileName(String fileUrl){
- String str = "aliyuncs.com/";
- int beginIndex = fileUrl.indexOf(str);
- if(beginIndex==-1) return null;
- return fileUrl.substring(beginIndex+str.length());
- }
- /**
- *
- * @MethodName: getFileName
- * @Description: 根据url获取fileNames集合
- * @param fileUrl 文件url
- * @return List<String> fileName集合
- */
- private static List<String> getFileName(List<String> fileUrls){
- List<String> names = new ArrayList<>();
- for (String url : fileUrls) {
- names.add(getFileName(url));
- }
- return names;
- }
- }
6.调用测试,OSSUploadUtil工具类对外只提供了几个方法:
- 本例只是简单的运用,当然还有更高级的应用暂时还没有研究,希望以后有空再分享出来。
- 其中很多例子,在官方的SDK中都有,本文只是展示了对于我这里适用的方式,其他的多种配置方式请参考官方文档。
- 如有问题,可以提出,希望能够交流和共同学习。
- 本文示例皆为原创,转载请注明出处。
阿里云OSS存储基于JAVA基本使用相关推荐
- 从AWS S3换成阿里云OSS存储所踩的坑
因业务需要,AWS S3 不能使用了,要换成阿里云OSS存储和下载.简单作以记录,以作备忘. 1.参照https://help.aliyun.com/product/31815.html?spm=51 ...
- 七牛云和阿里云OSS存储图片服务器使用
目录 1 图片存储方案 1.1 介绍 1.2 七牛云存储 1.2.1 注册.登录 1.2.2 新建存储空间 1.2.3 查看存储空间信息 1.2.4 开发者中心 1.2.5 鉴权 1.2.6 Java ...
- mysql数据库备份到oss_备份MySQL数据库并上传到阿里云OSS存储
1. 环境配置 要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载 本文以Linux系统 ...
- django图片上传到oss_django 配置阿里云OSS存储media文件的例子
1. 安装django-aliyun-oss2-storage包 linux上用 pip install django-aliyun-oss2-storage 无报错,顺利安装 windows上报错: ...
- 前端(react)上传到阿里云OSS存储 实例
需求背景 由于现有的后台管理系统,上传的视频越来越大,加上上传视频较慢,后端小哥提出直接从前端上传视频或者其他文件到阿里云OSS存储. 阿里云OSS 阿里云OSS文档介绍,这里不做过多赘述 安装 原本 ...
- 分布式文件存储——阿里云oss存储
阿里云oss存储 目录 阿里云oss存储 获取设置参数 实现上传.下载方法 设置生命周期 获取设置参数 bucket名 endpoit key secret package configconst ( ...
- tp5.0阿里云oss存储Demo
序言:最近在做一个项目,关于的是投稿的项目,其实就是一个图片网站的问题,原本做的一直是将文件存放到服务器中,但现在由于用户越来越多,所以要将图片的路径更新到一个位置,所以阿里云oss存储就出来了. 首 ...
- 阿里云oss 使用, 基于Nginx 配置云服务器+oss的内网访问 , 及使用Java SDK 完成上传,下载,删除,查询文件列表操作
一.同阿里产品,云服务器和存储对象oss-配置内网访问 阿里存储对象oss 地址: https://oss.console.aliyun.com/overview 配置须知 通过Nginx 进行网络转 ...
- JAVA通过阿里云OSS存储实现图片上传功能
一.前置准备 首先我们需要在阿里云注册账号,实名认证后开通OSS功能,点击进入OSS功能的管理平台 进入概览页面后,点击Bucket列表,创建一个Bucket(相当于一个存放文件的文件夹) 关键是要 ...
最新文章
- fscanf()函数具体解释
- Linux下undefined reference to ‘pthread_create’问题解决
- 【数据挖掘笔记十】聚类分析:基本概念和方法
- Java的工厂模式(三)
- 编写Linux内核模块——第一部分:前言
- linux_bash_shell_cheat_sheet(自译)
- centos7安装python3_详解Centos7升级python 2.7至Python 3.7
- 高可用之2——存储b
- Openproj 在64位操作系统报错errno=193
- 【渝粤教育】广东开放大学 企业财务报表分析 形成性考核 (26)
- 5月6阴阳师服务器维护,阴阳师正式服5月6日更新公告
- 乐高机器人走进图书馆活动方案_欢迎参加“乐高机器人创意搭建赛”活动
- verilog二分频代码verilog三分频代码
- 随机模拟在多排服务器上的应用,在Excel中应用随机函数模拟多服务台单队列排队系统...
- 爬虫学习日记1-豆瓣top250电影信息爬取
- JavaScript中pageX pageY offsetX offsetY区别
- $‘\r‘: command not found,syntax error near unexpected token `$‘in\r‘‘
- 在Delphi中打印条码的方法步骤如下
- android sdk版本
- Thinkcmf子栏目获取父级栏目所有子栏目列表
热门文章
- 西安海棠职业学院计算机考试,考计算机的同学,你们懂得~
- pandas 文档自用3
- 2022-2028全球与中国内存测试设备市场现状及未来发展趋势
- 调度算法先来先服务(FCFS)、最短作业优先(SJF)和最高响应比优先(HRRN)算法
- thead java_Java中多线程的使用(超级超级详细) Thead类的使用 3
- Docker Compose的安装与使用
- win10系统出现打开文件被拒绝访问的问题
- 花开记春,花落记秋,早已忘却岁月悠悠。曲终人散,花亦垂首,空留旧人昔日颜容。
- springboot 使用 @Scheduled注解定时任务, 方法传参解决办法
- NetCMS修改之四:扩展轮换幻灯片属性(NorFilt),具有导读显示