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

656 阅读3分钟

目录

1.阿里云官方demo

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

3.oss回调异常总结


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/…