上传图片
1、获取yml配置文件的中的endpoint、accessKeyId、accessKeySecret、bucketName
aliyun:
oss:
endpoint: oss-cn-hangzhou.aliyuncs.com
accessKeyId: 改成自己的id
accessKeySecret: 改成自己的秘钥
bucketName: mall-qsd
yml配置(上图)
@Value("${aliyun.oss.endpoint}")
private String ALIYUN_OSS_ENDPOINT;
@Value("${aliyun.oss.accessKeyId}")
private String ALIYUN_OSS_ACCESSKEYID;
@Value("${aliyun.oss.accessKeySecret}")
private String ALIYUN_OSS_ACCESSKEYSECRET;
@Value("${aliyun.oss.bucketName}")
private String ALIYUN_OSS_BUCKETNAME;
2、创建上传文件的元信息,可以通过文件元信息设置HTTP header。
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/jpg");
3、创建OSSClient实例
OSSClient ossClient = new OSSClient(ALIYUN_OSS_ENDPOINT, ALIYUN_OSS_ACCESSKEYID, ALIYUN_OSS_ACCESSKEYSECRET);
4、文件上传(完整代码)代码
public String uploadFile(MultipartFile file) throws IOException {
OSSClient ossClient = new OSSClient(ALIYUN_OSS_ENDPOINT, ALIYUN_OSS_ACCESSKEYID, ALIYUN_OSS_ACCESSKEYSECRET);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
// 获取文件名
String fileName = multipartFile.getOriginalFilename();
// 获取文件后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
// 最后上传生成的文件名
String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
// oss中的文件夹名
String objectName = sdf.format(new Date()) + "/" + finalFileName;
// 创建上传文件的元信息,可以通过文件元信息设置HTTP header(设置了才能通过返回的链接直接访问)。
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/jpg");
// 文件上传
ossClient.putObject(ALIYUN_OSS_BUCKETNAME, objectName, new ByteArrayInputStream(multipartFile.getBytes()),objectMetadata);
// 设置URL过期时间为1小时。
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
String url = ossClient.generatePresignedUrl(ALIYUN_OSS_BUCKETNAME, objectName, expiration).toString();
ossClient.shutdown();
log.info("阿里云OSS的文件url:{}", url);
return url;
}
5、返回的url:http://mall-qsd.oss-cn-hangzhou.aliyuncs.com/20200623/1592906142043520.jpg
6、点击链接就能直接访问了(链接设置了过期时间)
删除图片
/** * url :http://gulimall-code.oss-cn-zhangjiakou.aliyuncs.com/heima-leadnews/2020-10-10/13.jpg?Expires=1633871695&OSSAccessKeyId=LTAI4GAcBHYL68nTwPr5X6Yt&Signature=XIPBZQQS%2FDBFkIcS5dhPrhr11lg%3D * * @param url * @return */
public String delFile(String url) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
String[] split = url.split("\\?");
String objectName = split[0].replace("http://gulimall-code.oss-cn-zhangjiakou.aliyuncs.com/", "");
//转换后的objectName为heima-leadnews/2020-10-10/13.jpg
// 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
ossClient.deleteObject(bucketName, objectName);
// 关闭OSSClient。
ossClient.shutdown();
return "null";
}