java使用阿里云OSS对象存储保存文件,返回访问链接

代码如下包含详细注释:

public class demo {

    public static void main(String[] args) throws Exception {
        // Endpoint,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-beijing.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。建议创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "LTAI5tG6bncHtUwaPuEviGJC";
        String accessKeySecret = "dYOR6lKi2p3wjffQCBRwhM5sLUBYeP";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "youjingkai";

        // 创建上传文件的元信息,可以通过文件元信息设置HTTP header。(之后就可以通过url访问到文件,不会自动下载)
        ObjectMetadata meta = new ObjectMetadata();
//        meta.setContentType("image/jpeg");

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String fileName = "C:\\Users\\hanghang\\Desktop/AE9B74F29A4490B5FFE85ACCD869CC16.jpg";
        // 获取文件的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        // 生成上传文件名
        String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
        String objectName = sdf.format(new Date()) + "/" + finalFileName;
        File file = new File(fileName); //文件流

        try {
            //上传文件
            ossClient.putObject(bucketName, objectName, file);
            // 设置URL过期时间为1小时。
            Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
            // 生成以GET方法访问的签名URL,
            URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
            ossClient.shutdown();
            String str = url.toString();
            String[] parts = str.split("\\?");  //根据 ?截取字符串
            String mainPart = parts[0];
            System.out.println(mainPart);
        } catch (OSSException oe) {
            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 (ClientException ce) {
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                //关闭连接
                ossClient.shutdown();
            }
        }

    }
}

改进:

可以对这些方法进行封装成工具类,使用时直接调用即可。再加入try、catch、finally,完善代码,必定关闭连接,防止造成资源浪费。

第一个形参为:MultipartFile 则是 Spring MVC 框架中提供的专门用于处理 HTTP multipart
请求中文件部分的接口。当我们在 web 应用中上传文件时,form 表单提交的文件数据会被封装成一个 MultipartFile
对象,从而方便我们对上传的文件进行操作,比如获取文件名、大小、内容等信息,同时还可以保存到本地磁盘或者其他存储介质中。

第二个形参为:传入文件的全称例如:template.jpg

返回的结果是存储到阿里云oss文件的访问链接(字符串)

package com.lanqiaobei.ssm.yjk.util;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.ObjectMetadata;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;

@Component
public class ALoss {

    public String saveOss(MultipartFile mpfile,String filename) throws IOException {
        String mainPart="";
        // Endpoint,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-beijing.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。建议创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "LTAI5tG6bncHtUwaPuEviGJC";
        String accessKeySecret = "dYOR6lKi2p3wjffQCBRwhM5sLUBYeP";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "youjingkai";

        // 创建上传文件的元信息,可以通过文件元信息设置HTTP header。(之后就可以通过url访问到文件,不会自动下载)
        ObjectMetadata meta = new ObjectMetadata();
//        meta.setContentType("image/jpeg");

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String fileName = filename; // 完整文件名例如: template.jpg
        // 获取文件的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        // 生成上传文件名
        String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
        String objectName = sdf.format(new Date()) + "/" + finalFileName;
//        File file = new File(fileName);
        InputStream inputStream = mpfile.getInputStream();//获取文件的输入流


        try {
            //上传文件
            ossClient.putObject(bucketName, objectName, inputStream);
            // 设置URL过期时间为10年。
            Date expiration = new Date(System.currentTimeMillis() + 360000000 * 1000);
            // 生成以GET方法访问的签名URL,
            URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration);
            ossClient.shutdown();
            String str = url.toString();
            String[] parts = str.split("\\?");  //根据 ?截取字符串
            mainPart = parts[0];

        } catch (OSSException oe) {
            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 (ClientException ce) {
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                //关闭连接
                ossClient.shutdown();
            }
        }

        return mainPart;
    }

}

你可能感兴趣的:(笔记,java,阿里云,开发语言,OSS)