代码如下包含详细注释:
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;
}
}