【197】JAVA8调用阿里云对象存储API,保存图片并获取图片URL地址。

实际工作中,需要用阿里云对象存储保存图片,并且在上传图片到阿里云对象存储服务器后,获取图片在阿里云对象存储服务器的URL地址,以便给 WEB 前端显示。

阿里云对象存储上传图片的工具类

java 复制代码
package zhangchao;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.Date;
import java.util.UUID;

/**
 * 阿里云对象存储工具类
 */
public class OSSUtils {
    // OSS阿里云对象存储的AK和SK
    private static final String OSS_AK = "yourAK";
    private static final String OSS_SK = "yourSK";
    // OSS阿里云对象存储的Bucket名称
    private static final String OSS_BUCKET_NAME = "your-files";
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    private static final String OSS_ENDPOINT = "https://oss-cn-hangzhou.aliyuncs.com";


    /**
     * 上传图片并返回图片URL
     * @return 图片URL
     */
    public static String uploadImage(String imageFilePath) {
        String result = null;
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(OSS_ENDPOINT, OSS_AK, OSS_SK);

        FileInputStream fis = null;
        try {
            // 创建存储空间。
            fis = new FileInputStream(imageFilePath);
            String uuid = UUID.randomUUID().toString().replaceAll("-", "");
            ossClient.putObject(OSS_BUCKET_NAME, uuid, fis);

            // 设置URL过期时间为10年 3600l * 1000 * 24 * 365 * 10
            Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000L *
                    24L * 365L * 10L);
            URL url = ossClient.generatePresignedUrl(OSS_BUCKET_NAME, uuid, expiration);
            if (url != null) {
                result = url.toString();
            }
        } catch (OSSException oe) {
            StringBuilder sb = new StringBuilder();
            sb.append("Caught an OSSException, which means your request made it to OSS, ")
                    .append("but was rejected with an error response for some reason.");
            sb.append("Error Message:").append(oe.getErrorMessage());
            sb.append("Error Code:").append(oe.getErrorCode());
            sb.append("Request ID:").append(oe.getRequestId());
            sb.append("Host ID:").append(oe.getHostId());
            System.out.println(sb.toString());
        } catch (ClientException ce) {
            StringBuilder sb = new StringBuilder();
            sb.append("Caught an ClientException, which means the client encountered ")
                    .append("a serious internal problem while trying to communicate with OSS, ")
                    .append("such as not being able to access the network.");
            sb.append("Error Message:" + ce.getMessage());
            System.out.println(sb.toString());
            ce.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != fis) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return result;
    }
}

调用的 main 方法:

java 复制代码
package zhangchao;

public class Main {
    public static void main(String[] args) {
        String imgUrl = OSSUtils.uploadImage("E:\\ws\\zc\\Java8OSSImg\\src\\main\\resources\\q1.jpg");
        System.out.println(imgUrl);
    }
}

运行结果,这里显示了返回的图片 URL 地址:

bash 复制代码
https://your-files.oss-cn-hangzhou.aliyuncs.com/abc123?Expires=2021599742&OSSAccessKeyId=youAK&Signature=xxxxxx

这个地址没办法用浏览器直接看,需要写个HTML来测试一下。

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <img src="https://your-files.oss-cn-hangzhou.aliyuncs.com/abc123?Expires=2021599742&OSSAccessKeyId=youAK&Signature=xxxxxx">
</body>
</html>
相关推荐
丸码5 分钟前
Java异常体系全解析
java·开发语言
v***88566 分钟前
Springboot项目:使用MockMvc测试get和post接口(含单个和多个请求参数场景)
java·spring boot·后端
q***49456 分钟前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
IMPYLH12 分钟前
Lua 的 require 函数
java·开发语言·笔记·后端·junit·lua
曾经的三心草14 分钟前
基于正倒排索引的Java文档搜索引擎1-实现索引模块-实现Parser类
java·开发语言·搜索引擎
vx_bscxy32238 分钟前
告别毕设焦虑!Python 爬虫 + Java 系统 + 数据大屏,含详细开发文档 基于web的图书管理系统74010 (上万套实战教程,赠送源码)
java·前端·课程设计
字节拾光录1 小时前
Java工具库三足鼎立:Hutool、Apache Commons、Guava深度测评与场景化选型指南
java·apache·guava
爱学习的小可爱卢1 小时前
Java UDP编程实战:UDP数据报套接字编程DatagramPacket、DatagramSocket 、InetSocketAddress
java·udp·udp数据报
未来之窗软件服务1 小时前
幽冥大陆(三十五)S18酒店门锁SDK go语言——东方仙盟筑基期
java·前端·golang·智能门锁·仙盟创梦ide·东方仙盟·东方仙盟sdk
r***93481 小时前
【Redis】在Java中以及Spring环境下操作Redis
java·redis·spring