阿里云对象存储OSS文件上传
阿里云oss地址:对象存储OSS_云存储服务_企业数据管理_存储-阿里云阿里云对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,提供12个9的数据持久性,99.995%的数据可用性和多种存储类型,适用于数据湖存储,数据迁移,企业数据管理,数据处理等多种场景,可对接多种计算分析平台,直接进行数据处理与分析,打破数据孤岛,优化存储成本,提升业务价值。https://www.aliyun.co
·
阿里云oss地址:
学习的oss的,阿里云有提供免费的。
地域可以选择距离自己最近的
点击右上角的图片
保存自己的 AccessKey ID,AccessKey Secret
导入依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.6</version>
</dependency>
配置文件,我使用的是yml
# 阿里云oss配置
aliyun:
oss:
endpoint: oss-cn-beijing.aliyuncs.com # 对应公网endpoint地址
accessKeyId: #改成自己的AccessKey ID
accessKeySecret: #改成自己的AccessKey Secret
bucketname: #改成自己的Bucket 列表
urlPrefix: active #保存文件夹路径
package com.tm.conf;
import java.util.HashMap;
import java.util.Map;
/**
* 操作消息提醒
*/
public class AjaxResult extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;
/**
* 初始化一个新创建的 Message 对象
*/
public AjaxResult() {
}
/**
* 返回错误消息
*
* @return 错误消息
*/
public static AjaxResult error() {
return error(1, "操作失败");
}
/**
* 返回错误消息
*
* @param msg 内容
* @return 错误消息
*/
public static AjaxResult error(String msg) {
return error(500, msg);
}
/**
* 返回错误消息
*
* @param code 错误码
* @param msg 内容
* @return 错误消息
*/
public static AjaxResult error(int code, String msg) {
AjaxResult json = new AjaxResult();
json.put("code", code);
json.put("msg", msg);
return json;
}
/**
* 返回错误消息
*
* @param code 错误码
* @param msg 错误消息
* @param data 附加内容
* @return 错误消息
*/
public static AjaxResult error(int code, String msg, Object data) {
AjaxResult json = new AjaxResult();
json.put("code", code);
json.put("msg", msg);
json.put("data", data);
return json;
}
/**
* 返回成功消息
*
* @param msg 内容
* @return 成功消息
*/
public static AjaxResult success(String msg) {
AjaxResult json = new AjaxResult();
json.put("msg", msg);
json.put("code", 0);
return json;
}
/**
* 返回成功 带对象
*
* @param data 对象内容
* @return 成功消息
*/
public static AjaxResult success(Object data) {
AjaxResult json = new AjaxResult();
json.put("msg", "");
json.put("code", 0);
json.put("data", data);
return json;
}
/**
* 返回成功 带map
*
* @param map 对象内容
* @return 成功消息
*/
public static AjaxResult success(Map<String, Object> map) {
AjaxResult json = new AjaxResult();
json.put("msg", "");
json.put("code", 0);
json.putAll(map);
return json;
}
/**
* 返回成功 带对象
*
* @param data 对象内容
* @return 成功消息
*/
public static AjaxResult success(Object[] data) {
AjaxResult json = new AjaxResult();
json.put("msg", "");
json.put("code", 0);
json.put("data", data);
return json;
}
/**
* 返回成功消息
*
* @return 成功消息
*/
public static AjaxResult success() {
return AjaxResult.success("操作成功");
}
/**
* 返回成功消息
*
* @param key 键值
* @param value 内容
* @return 成功消息
*/
@Override
public AjaxResult put(String key, Object value) {
super.put(key, value);
return this;
}
}
package com.tm.conf;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@PropertySource(value = "classpath:application.yml") //指定配置文件的位置
public class AliConfig implements InitializingBean {
/**
* 对应公网endpoint地址
*/
@Value("${aliyun.oss.endpoint}")
private String endpoint;
/**
* AccessKeyId
*/
@Value("${aliyun.oss.accessKeyId}")
private String accessKeyId;
/**
* AccessKeySecret
*/
@Value("${aliyun.oss.accessKeySecret}")
private String accessKeySecret;
/**
* Bucket名称
*/
@Value("${aliyun.oss.bucketname}")
private String bucketName;
/**
* 上传文件夹路径
*/
@Value("${aliyun.oss.urlPrefix}")
private String folder;
public static String END_POINT;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
public static String FOLDER;
@Override
public void afterPropertiesSet() throws Exception {
END_POINT = endpoint;
ACCESS_KEY_ID = accessKeyId;
ACCESS_KEY_SECRET = accessKeySecret;
BUCKET_NAME = bucketName;
FOLDER = folder;
}
}
package com.tm.conf;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import org.springframework.beans.factory.annotation.Value;
import java.net.URL;
import java.util.Date;
/**
* @Author : lyc
* @CreateDate : 2022-04-02 00:41
*/
public class OssUtil {
/**
* 阿里云endpoint
*/
@Value("${aliyun.oss.endpoint}")
private String aliyunDomain;
/**
* 阿里云ak
*/
@Value("${aliyun.oss.accessKeyId}")
private String aliyunAccessKeyId;
/**
* 阿里云收款
*/
@Value("${aliyun.oss.accessKeySecret}")
private String aliyunAccessKeySecret;
/**
* 阿里云Bucket
*/
@Value("${aliyun.oss.bucketname}")
private String aliyunBucketName;
/**
* 私有文件生成临时访问路径
*
* @param key 访问文件 实例(20220331/2f5837e548674a288f6ecdbb2f0012dc.jpg)
* @return
*/
public String getUrl(String key) {
OSSClient ossClient = new OSSClient(aliyunDomain, aliyunAccessKeyId, aliyunAccessKeySecret);
// 设置URL过期时间为1小时
Date expiration = new Date(new Date().getTime() + 3600 * 1000);
GeneratePresignedUrlRequest generatePresignedUrlRequest;
generatePresignedUrlRequest = new GeneratePresignedUrlRequest(aliyunBucketName, key);
generatePresignedUrlRequest.setExpiration(expiration);
URL url = ossClient.generatePresignedUrl(generatePresignedUrlRequest);
return url.toString();
}
}
package com.tm.controller;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.OSSObject;
import com.tm.conf.AliConfig;
import org.joda.time.DateTime;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.Arrays;
import java.util.Base64;
import java.util.UUID;
@RestController
@RequestMapping("/upload")
public class UploadController {
@PostMapping
public String uploadFile(@RequestBody MultipartFile file) {
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = AliConfig.END_POINT;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = AliConfig.ACCESS_KEY_ID;
String accessKeySecret = AliConfig.ACCESS_KEY_SECRET;
String backetName = AliConfig.BUCKET_NAME;
String fileName=AliConfig.FOLDER;
String code = null;
String uploadUrl = null;
try {
// 创建OSSClient实例
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
InputStream inputStream = file.getInputStream();
String filename = file.getOriginalFilename();
// 在文件名称中添加随机的唯一的值,防止名称一样时文件的覆盖
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
// 文件类型
String fileType = filename.substring(filename.lastIndexOf("."));
filename = uuid + fileType;
// 把文件安装日期进行分类,会自动创建文件夹
String datePath = new DateTime().toString("yyyy/MM/dd");
filename = fileName+"/"+datePath + "/" + filename;
ossClient.putObject(backetName, filename, inputStream);
// 上传文件之后的路径,自己拼接
uploadUrl = "https://" + backetName + "." + endpoint + "/" + filename;
//转BYTE
OSSObject image = ossClient.getObject(backetName, filename);
InputStream content = image.getObjectContent();
byte[] bytes = null;
if (content != null) {
try {
// 设置一个足够大的buffer用于存储图片的比特数据
int length = 1920 * 1260 * 3;
byte[] buf = new byte[length];
int size = 0;
int temp;
while ((temp = content.read()) != -1) {
buf[size] = (byte) temp;
size++;
}
content.close();
// 对缓冲区进行裁剪后,将图片以字节数组的形式返回
bytes = Arrays.copyOf(buf, size);
} catch (IOException e) {
System.out.println("exception");
return null;
}
}
// 关闭OSSClient。
ossClient.shutdown();
// 将数组转为字符串
String s = new String(Base64.getEncoder().encode(bytes));
code = "data:image/png;base64," + s;
// 关闭OSSClient
ossClient.shutdown();
} catch (IOException e) {
e.printStackTrace();
}
return code;
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)