马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、什么是阿里云存储?
阿里云对象存储OSS(Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用OSS,您可以通过网络随时存储和调用包罗文本、图片、音频和视频等在内的各种文件。
二、阿里云存储的特点和功能
- 海量存储:支持无限量的数据存储,恰当各种规模的企业和个人用户。
- 高可用性:数据存储在多个数据中心,提供99.999999999%(11个9)的数据持久性。
- 安全性:提供多种安全机制,包罗数据加密、访问控制和身份验证等,确保用户数据的安全。
- 高性能:支持大并发读写,可以或许快速响应用户哀求。
- 机动计费:根据存储空间和流量使用情况举行计费,恰当不同需求的用户。
- 丰富的API:支持RESTful API,方便开辟者集成和使用。
- 多种存储类型:提供尺度存储、低频存储和归档存储等不同存储类型,满足不同访问频率的数据需求。
- 数据管理:支持生命周期管理、版本管理和数据迁移等功能,方便用户管理存储的数据。
三、springboot文件上传
1.为什么要使用阿里云OSS对象存储
在我们使用了阿里云OSS对象存储服务之后,我们的项目当中假如涉及到文件上传如许的业务,在前端举行文件上传并哀求到服务端时,在服务器本地磁盘当中就不需要再来存储文件了。我们直接将吸收到的文件上传到oss,由 oss帮我们存储和管理,同时阿里云的oss存储服务还保障了我们所存储内容的安全可靠。
2.举行准备工作(注册阿里云账户,并创建阿里云oss对象实例)
1.注册阿里云账户(注册完成后需要实名认证)
2.注册完账号之后,就可以登录阿里云
3.通过控制台找到对象存储OSS服务
假如是第一次访问,还需要开通对象存储服务OSS
4.开通OSS服务之后,就可以进入到阿里云对象存储的控制台
5.点击左侧的 "Bucket列表",创建一个Bucket
创建
3.编写入门程序
起首我们需要来打开阿里云OSS的官方文档,在官方文档中找到 SDK 的示例代码:




参照官方提供的SDK,改造一下,即可实现文件上传功能:
- 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.PutObjectRequest;
- import com.aliyun.oss.model.PutObjectResult;
- import java.io.FileInputStream;
- import java.io.InputStream;
- public class AliOssTest {
- public static void main(String[] args) throws Exception {
- // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
- String endpoint = "oss-cn-shanghai.aliyuncs.com";
-
- // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
- String accessKeyId = "LTAI5t9MZK8iq5T2Av5GLDxX";
- String accessKeySecret = "C0IrHzKZGKqU8S7YQcevcotD3Zd5Tc";
-
- // 填写Bucket名称,例如examplebucket。
- String bucketName = "web-framework01";
- // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
- String objectName = "1.jpg";
- // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
- // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
- String filePath= "C:\\Users\\Administrator\\Pictures\\1.jpg";
- // 创建OSSClient实例。
- OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
- try {
- InputStream inputStream = new FileInputStream(filePath);
- // 创建PutObjectRequest对象。
- PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
- // 设置该属性可以返回response。如果不设置,则返回的response为空。
- putObjectRequest.setProcess("true");
- // 创建PutObject请求。
- PutObjectResult result = ossClient.putObject(putObjectRequest);
- // 如果上传成功,则返回200。
- System.out.println(result.getResponse().getStatusCode());
- } 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();
- }
- }
- }
- }
复制代码 在以上代码中,需要更换的内容为:
- accessKeyId:阿里云账号AccessKey
- accessKeySecret:阿里云账号AccessKey对应的秘钥
- bucketName:Bucket名称
- objectName:对象名称,在Bucket中存储的对象的名称
- filePath:文件路径
AccessKey :
运行以上程序后,会把本地的文件上传到阿里云OSS服务器上:
4.集成代码
阿里云oss对象存储服务的准备工作以及入门程序我们都已经完成了,接下来我们就需要在案例当中集成oss对象存储服务,来存储和管理案例中上传的图片。
引入阿里云OSS上传文件工具类(由官方的示例代码改造而来)
- import com.aliyun.oss.OSS;
- import com.aliyun.oss.OSSClientBuilder;
- import org.springframework.stereotype.Component;
- import org.springframework.web.multipart.MultipartFile;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.UUID;
- @Component
- public class AliOSSUtils {
- private String endpoint = "https://oss-cn-shanghai.aliyuncs.com";
- private String accessKeyId = "LTAI5t9MZK8iq5T2Av5GLDxX";
- private String accessKeySecret = "C0IrHzKZGKqU8S7YQcevcotD3Zd5Tc";
- private String bucketName = "web-framework01";
- /**
- * 实现上传图片到OSS
- */
- public String upload(MultipartFile multipartFile) throws IOException {
- // 获取上传的文件的输入流
- InputStream inputStream = multipartFile.getInputStream();
- // 避免文件覆盖
- String originalFilename = multipartFile.getOriginalFilename();
- String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
- //上传文件到 OSS
- OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
- ossClient.putObject(bucketName, fileName, inputStream);
- //文件访问路径
- String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
- // 关闭ossClient
- ossClient.shutdown();
- return url;// 把上传到oss的路径返回
- }
- }
复制代码 修改UploadController代码:
- import com.itheima.pojo.Result;
- import com.itheima.utils.AliOSSUtils;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.multipart.MultipartFile;
- import java.io.IOException;
- @Slf4j
- @RestController
- public class UploadController {
- @Autowired
- private AliOSSUtils aliOSSUtils;
- @PostMapping("/upload")
- public Result upload(MultipartFile image) throws IOException {
- //调用阿里云OSS工具类,将上传上来的文件存入阿里云
- String url = aliOSSUtils.upload(image);
- //将图片上传完成后的url返回,用于浏览器回显展示
- return Result.success(url);
- }
-
- }
复制代码 使用postman测试:
如许就成功上传图片啦,data返回的就是图片的数据。
四、总结
在Spring Boot中实现文件上传功能需要设置项目依赖、创建控制器处置惩罚文件上传哀求、设置文件巨细限定、编写HTML表单供用户选择文件,并确保存储目录存在。启动应用后,可以通过访问上传表单举行测试,同时要注意文件类型查抄和异常处置惩罚,以提升安全性和用户体验。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |