目录
1.阿里云官方demo
官网地址: ->上传回调 - SDK示例| 阿里云
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import java.io.ByteArrayInputStream;
public class Demo {
public static void main(String[] args) {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称,例如examplebucket。
String bucketName = "examplebucket";
// 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
String objectName = "exampledir/exampleobject.txt";
// 您的回调服务器地址,例如https://example.com:23450或者https://127.0.0.1:9090。
String callbackUrl = "yourCallbackServerUrl";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
String content = "Hello OSS";
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName,new ByteArrayInputStream(content.getBytes()));
// 上传回调参数。
Callback callback = new Callback();
callback.setCallbackUrl(callbackUrl);
//(可选)设置回调请求消息头中Host的值,即您的服务器配置Host的值。
// callback.setCallbackHost("yourCallbackHost");
// 设置发起回调时请求body的值。
callback.setCallbackBody("{\\\"mimeType\\\":${mimeType},\\\"size\\\":${size}}");
// 设置发起回调请求的Content-Type。
callback.setCalbackBodyType(Callback.CalbackBodyType.JSON);
// 设置发起回调请求的自定义参数,由Key和Value组成,Key必须以x:开始。
callback.addCallbackVar("x:var1", "value1");
callback.addCallbackVar("x:var2", "value2");
putObjectRequest.setCallback(callback);
PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);
// 读取上传回调返回的消息内容。
byte[] buffer = new byte[1024];
putObjectResult.getResponse().getContent().read(buffer);
// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
putObjectResult.getResponse().getContent().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();
}
}
}
}
[官网上有的位置没说 只能自己写]
2.这个是OssUtil(本地可以直接测通)
里面的内容填自己的变量与官网上一致
之后想封装就封装, demo能跑通在封装
看下面的注意事项------------>
package sso.service.upload.impl;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.Callback;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import lombok.extern.slf4j.Slf4j;
import sso.util.FileIOUtils;
import sso.vo.SystemResult;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import static sso.vo.ErrorCode.OSS_UPLOAD_CODE;
/**
* @Author pzy
* @Version 0.1.0
*/
@Slf4j
public class OSSUtils {
// public static String UPLOAD_OSS_URL="*";
/**
* uploadOssUrl 上传文件的本地路径(寻找)
* objectName : 上传oss的文件名
*
* @param uploadOssUrl
*/
public static SystemResult OSSUpload(String uploadName, String uploadOssUrl) {
//获取年月日 +时分秒 文章中记录 如果再使用封装
String[] strNow1 = new SimpleDateFormat("yyyy-MM-dd").format(new Date()).toString().split("-");
int i = Integer.parseInt(strNow1[0]);//获取年
int i1 = Integer.parseInt(strNow1[1]);//获取月
int i2 = Integer.parseInt(strNow1[2]);//获取日
//System.out.printf("%s\\%s\\%s\n", i, i1, i2);
//公司的oss
String endpoint = "*";
String accessKeyId = "";
String accessKeySecret = "";
String bucketName = "";
// img/2022/3/8/AD/
String objectName = "img" + "/" + i + "/" + i1 + "/" + i2 + "/AD" + "/" + uploadName;
// 创建OSSClient实例。
com.aliyun.oss.OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
String realUrl = uploadOssUrl + "\\" + uploadName;
// 上传文件流。
InputStream inputStream = null;
try {
//inputStream = new FileInputStream("D:\\software\\workspaceAll\\test\\testdemo\\src\\main\\resources\\static\\pzy\\01.mp4");
inputStream = new FileInputStream(realUrl);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
// 上传回调参数。
Callback callback = new Callback();
//回调路径
callback.setCallbackUrl("******");
// 设置发起回调时请求body的值。
callback.setCallbackBody("bucket:${bucket}&object=${object}");
// 设置发起回调请求的Content-Type。
callback.setCalbackBodyType(Callback.CalbackBodyType.URL);
putObjectRequest.setCallback(callback);
PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);
// 读取上传回调返回的消息内容。
// byte[] buffer = new byte[1024];
// putObjectResult.getResponse().getContent().read(buffer);
// // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
// putObjectResult.getResponse().getContent().close();
//成功后会返回图片的url
String ossUploadBackUrl = putObjectResult.getResponse().getUri();
// System.out.println(ossUploadBackUrl);
log.info("=====>{}", ossUploadBackUrl);
boolean flag = false;
//将路径存储数据库
if (ossUploadBackUrl != null) {
log.debug("oss存储成功!!!");
// 关闭OSSClient。
ossClient.shutdown();
flag = FileIOUtils.fileGCDelete(realUrl);
return SystemResult.ok("oss存储成功!!!,本地文件删除状态---->" + flag).putData(ossUploadBackUrl);
} else {
log.error("oss存储失败!!!");
// 关闭OSSClient。
ossClient.shutdown();
flag = FileIOUtils.fileGCDelete(realUrl);
return SystemResult.error(OSS_UPLOAD_CODE, "文件上传Oss失败,本地文件删除状态---->" + flag);
}
}
}
注意: 报红的部分 常量或util包直接删除即可(那些是为其他业务服务或者error状态码)
3.oss回调异常总结
回调出现错误可以看看: blog.csdn.net/pingzhuyan/…