300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > java oss存储对象 文件上传 获取回调中的url 官网地址

java oss存储对象 文件上传 获取回调中的url 官网地址

时间:2021-09-30 23:57:07

相关推荐

java oss存储对象 文件上传  获取回调中的url  官网地址

目录

1.阿里云官方demo

2.这个是OssUtil(本地可以直接测通)

3.oss回调异常总结

4. 优化版本(不可直接使用)

注意: 想直接使用 请使用 2 中代码

-> 4.1 修复图片 在网页上只能下载不能预览问题

-> 4.2 修改动态配置, 跟随dev test master 环境获取配置

-> 4.3 上代码

-> 4.4 另外一种思路

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-";// 阿里云账号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";// 您的回调服务器地址,例如: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*/@Slf4jpublic 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);//公司的ossString endpoint = "*";String accessKeyId = "";String accessKeySecret = "";String bucketName = "";// img//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();//成功后会返回图片的urlString 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回调异常总结

回调出现错误可以看看:/pingzhuyan/article/details/124213798

4. 优化版本(不可直接使用)

注意: 想直接使用 请使用 2 中代码

注意: 想直接使用 请使用 2 中代码

-> 4.1 修复图片 在网页上只能下载不能预览问题

-> 4.2 修改动态配置, 跟随dev test master 环境获取配置

ps: 部分位置飘红, 请忽略 仅仅是路径名, 随意添加, 其他不多介绍

-> 4.3 上代码

package com.aisce.axmall.third.utils;import com.aisce.axmall.third.vo.ResultResponse;import mon.constant.AuthServerConstant;import mon.vo.MemberResponseVo;import com.aliyun.oss.OSSClientBuilder;import com.aliyun.oss.model.Callback;import com.aliyun.oss.model.ObjectMetadata;import com.aliyun.oss.model.PutObjectRequest;import com.aliyun.oss.model.PutObjectResult;import lombok.monsLog;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Value;import org.ponent;import javax.annotation.PostConstruct;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;import java.text.SimpleDateFormat;import java.util.Date;/*** oss上传工具包* <p>* oss V3.0.0版本 启动* 历史版本:* 1. 搭建oss* 2. 根据代码环境切换回调函数* 3. 优化服务器内存使用问题* 4. 修复部分bug* <p>* 新版划分* 一级:* 本地dev* 测试test* 正式master* <p>** @author pzy*/@Slf4j@Componentpublic class OSSUtils {//accessKey@Value("${spring.cloud.alicloud.access-key}")public String accessKeyIdConst;//秘钥@Value("${spring.cloud.alicloud.secret-key}")public String accessKeySecretConst;//endPoint@Value("${spring.cloud.alicloud.oss.endpoint}")public String endpointConst;//bucket名@Value("${spring.cloud.alicloud.oss.bucket}")public String bucketNameConst;//回调函数路径@Value("${spring.alibaba.oss.callBack.ipUrl}")public String ossCallBackIpUrlConst;/*V3.0版本 优化 新加 跟随环境位置生成不同的文件夹*/@Value("${spring.profiles.active}")public String environment;/*** 与上面变量一一对应*/public static String accessKeyId;public static String accessKeySecret;public static String endpoint;public static String bucketName;public static String ossCallBackIpUrl;public static String ossEnvironment;@PostConstruct//初始化public void init() {/* 赋值操作 */accessKeyId = accessKeyIdConst;accessKeySecret = accessKeySecretConst;endpoint = endpointConst;bucketName = bucketNameConst;ossCallBackIpUrl = ossCallBackIpUrlConst;ossEnvironment = environment;}// public static String UPLOAD_OSS_URL="*";/*** uploadOssUrl 上传文件的本地路径(寻找)* objectName : 上传oss的文件名** @param uploadOssUrl*/public static ResultResponse OSSUpload(String uploadName, String uploadOssUrl) {//V3.0.1版 废弃----------------------------------------------->//获取年月日 +时分秒 文章中记录 如果再使用封装// 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);// img//3/8/AD/ oss上传路径整合修改// String objectName = "img" + "/" + i + "/" + i1 + "/" + i2 + "/pzyStorekeeperOSS" + "/" + uploadName;// String objectName = ossEnvironment + "/" + i + "/" + i1 + "/" + i2 + "/pzyStorekeeperOSS" + "/" + uploadName;//----------------------------------------------------------->Integer companyId = *;//随便Integer userRole = *;//随便String roleName = roleChangeToName(userRole);/*** V3.0.1版:* 路径优化:* 演示示例一: dev/store//01/***.png* 演示示例二:*/String objectName = String.format("%s/%s/%s/%s", ossEnvironment, roleName, companyId, uploadName);// 创建OSSClient实例 开启oss。com.aliyun.oss.OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);String realUrl = uploadOssUrl + "\\" + uploadName;// 上传文件流。InputStream inputStream = null;try {inputStream = new FileInputStream(realUrl);} catch (FileNotFoundException e) {e.printStackTrace();throw new RuntimeException("路径异常,上传失败");}/*V3.0.1 解决阿里云OSS 打开图片地址无法预览,直接下载*/ObjectMetadata meta = new ObjectMetadata();meta.setContentType("image/jpg");//指定了图片格式PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream, meta);// 上传回调参数。Callback callback = new Callback();//回调路径callback.setCallbackUrl(ossCallBackIpUrl);// 设置发起回调时请求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();//成功后会返回图片的urlString 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);log.info("返回信息:{}", flag);return ResultResponse.ok(ossUploadBackUrl);} else {log.error("oss存储失败!!!");// 关闭OSSClient。ossClient.shutdown();flag = FileIOUtils.fileGCDelete(realUrl);return ResultResponse.error("文件上传Oss失败,本地文件删除状态---->" + flag);}}/*** 角色转化方法** @param userRole* @return*/private static String roleChangeToName(Integer userRole) {String roleName = "";switch (userRole) {case 1://*roleName = "*";break;case 2://*roleName = "*";break;case 3://*roleName = "*";break;case 4://*roleName = "*";break;default://*roleName = "*";break;}return roleName;}}

-> 4.4 另外一种思路

创建@Bean对象 但是容易出现创建失败 显示ossClient关闭现象

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。