目录
阿里云:
阿里云是阿里巴巴集团旗下全球领先的云计算公司,也是国内最大的云服务提供商。
阿里云OSS:
介绍:
阿里云对象存储OSS(Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。
阿里云OSS将数据文件以对象(object)的形式上传到存储空间(bucket)中。
作用:
-
创建一个或者多个存储空间,向每个存储空间中添加一个或多个文件。
-
通过获取已上传文件的地址进行文件的分享和下载。
-
通过修改存储空间或文件的属性或元信息来设置相应的访问权限。
-
在阿里云管理控制台执行基本和高级OSS任务。
-
使用阿里云开发工具包或直接在应用程序中进行RESTful API调用执行基本和高级OSS任务
打开对象存储OSS管理界面:
控制台搜索oss对象存储,展开对象存储OSS菜单。
什么是Bucket:
Bucket:存储空间是用户用于存储对象(Object文件)的容器,所有的对象都必须隶属于某个存储空间。
创建Bucket:
上传文件测试:
基于刚刚成功创建的bucket进行上传文件测试。
发现问题:
在刚刚上传的文件详情中我们看到该文件的URL后缀带有Expires和OSSAccessKeyId等参数,我们在日常通过网络访问云上的图片文件时,URL后缀是不带这些参数的,如何去掉这些参数呢,我们需要bucket关闭阻止公共访问并且Bucket ACL开启公共读。
Bucket开启公共访问:
再次上传文件测试:
文件URL已恢复正常可以通过外网正常访问下载。
创建AccessKey:
云账号AccessKey是访问阿里云API的密钥,具有账户的完全权限。
Java项目集成OSS:
打开Java集成OSS文档:
打开OSS管理界面任务栏最后一个SDK下载
查看Java集成OSS文档:
Maven项目中加入依赖:
文件上传示例代码:
封装文件上传OSSUtil工具类:
package com.example.springbootquickstart.utils;
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.FileInputStream;
import java.io.InputStream;
public class AliOSSUtil {
// bucket概述:访问端口-外网访问-Endpoint(地域节点)
private static final String ENDPOINT = "https://oss-cn-qingdao.aliyuncs.com";
// 密钥
private static final String ACCESS_KEY_ID = "LTAI5t6b2ZF3TSo2C5w89VyC";
private static final String ACCESS_KEY_SECRET = "rfp72IRXg4kEBfANEk2NastgAcItzi";
// bucket概述:存储空间名称
private static final String BUCKET_NAME = "bucket-yangyang-one";
// objectName: 图片名称(包含后缀), in: 输入流
public static String uploadFile(String objectName, InputStream in) {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(ENDPOINT,ACCESS_KEY_ID,ACCESS_KEY_SECRET);
// 返回OSS图片地址
String url = "";
try {
// 创建PutObjectRequest对象。
PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET_NAME, objectName, in);
// 创建PutObject请求。
PutObjectResult result = ossClient.putObject(putObjectRequest);
// 文件上传成功后外网访问地址。 示例: https://bucket-yangyang-one.oss-cn-qingdao.aliyuncs.com/1.png
url = "https://" + BUCKET_NAME + "." + ENDPOINT.substring(ENDPOINT.lastIndexOf("/")+1) + "/" + objectName;
} 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 (ClientException 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();
}
}
return url;
}
}
定义Controller:
定义Controller映射文件上传请求,UUID生成文件名,调用OSSUtil工具类上传文件。
package com.example.springbootquickstart.controller;
import com.example.springbootquickstart.dto.ResultDTO;
import com.example.springbootquickstart.utils.AliOSSUtil;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.UUID;
@RestController
@RequestMapping(value = "/file")
public class FileUploadController {
@RequestMapping(method = RequestMethod.POST, value = "/upload")
public ResultDTO upload(MultipartFile file) throws IOException {
String originalFilename = file.getOriginalFilename();
String originalFileType = originalFilename.substring(originalFilename.lastIndexOf("."));
String filename = UUID.randomUUID().toString()+originalFileType;
String url = AliOSSUtil.uploadFile(filename, file.getInputStream());
return ResultDTO.success(url);
}
}
调整项目上传文件大小限制:
max-file-size:单个文件大小。max-request-size:总上传的数据大小。