后端Java学习:springboot之文件上传(阿里云OSS存储)
一、什么是阿里云存储?阿里云对象存储OSS(Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用OSS,您可以通过网络随时存储和调用包罗文本、图片、音频和视频等在内的各种文件。
https://i-blog.csdnimg.cn/direct/579949b3106b4637ad859bc1b5404f68.png
二、阿里云存储的特点和功能
[*] 海量存储:支持无限量的数据存储,恰当各种规模的企业和个人用户。
[*] 高可用性:数据存储在多个数据中心,提供99.999999999%(11个9)的数据持久性。
[*] 安全性:提供多种安全机制,包罗数据加密、访问控制和身份验证等,确保用户数据的安全。
[*] 高性能:支持大并发读写,可以或许快速响应用户哀求。
[*] 机动计费:根据存储空间和流量使用情况举行计费,恰当不同需求的用户。
[*] 丰富的API:支持RESTful API,方便开辟者集成和使用。
[*] 多种存储类型:提供尺度存储、低频存储和归档存储等不同存储类型,满足不同访问频率的数据需求。
[*] 数据管理:支持生命周期管理、版本管理和数据迁移等功能,方便用户管理存储的数据。
三、springboot文件上传
1.为什么要使用阿里云OSS对象存储
在我们使用了阿里云OSS对象存储服务之后,我们的项目当中假如涉及到文件上传如许的业务,在前端举行文件上传并哀求到服务端时,在服务器本地磁盘当中就不需要再来存储文件了。我们直接将吸收到的文件上传到oss,由 oss帮我们存储和管理,同时阿里云的oss存储服务还保障了我们所存储内容的安全可靠。
https://i-blog.csdnimg.cn/direct/9b91053279db45a1bb4cf719d05a7169.png
2.举行准备工作(注册阿里云账户,并创建阿里云oss对象实例)
1.注册阿里云账户(注册完成后需要实名认证)
2.注册完账号之后,就可以登录阿里云
https://i-blog.csdnimg.cn/direct/9314ac2357db4bda9eb36ed534f37881.png
3.通过控制台找到对象存储OSS服务
https://i-blog.csdnimg.cn/direct/5573ab82f7b44d1fbe9546d414a65c97.png
假如是第一次访问,还需要开通对象存储服务OSS
https://i-blog.csdnimg.cn/direct/12ab774c02084143a97cac179594ddcc.png
https://i-blog.csdnimg.cn/direct/82e37ee8309944279e8fa58505eb8e2b.png
4.开通OSS服务之后,就可以进入到阿里云对象存储的控制台
https://i-blog.csdnimg.cn/direct/9c81075a3ead49aea003f9a70416449d.jpeg
5.点击左侧的 "Bucket列表",创建一个Bucket
https://i-blog.csdnimg.cn/direct/271f44d05120480f8bceb6e0e8b5dcc7.jpeg
创建
https://i-blog.csdnimg.cn/direct/63d31c213f764e64a598ff7991f8fb03.png
3.编写入门程序
起首我们需要来打开阿里云OSS的官方文档,在官方文档中找到 SDK 的示例代码:
https://i-blog.csdnimg.cn/direct/1b811d3b45de44c396b7e89c7ef7318c.png
https://i-blog.csdnimg.cn/direct/9dee5c0af088474787957ee737850d80.png
https://i-blog.csdnimg.cn/direct/f7beb23e0ae4437c9484eb955e0c7232.png
https://i-blog.csdnimg.cn/direct/a104bf131f0748bcb06725a3a4e9ffa3.png
参照官方提供的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 :
https://i-blog.csdnimg.cn/direct/3a7e9d5a0c3a492aa74300a2e7ec2665.png
运行以上程序后,会把本地的文件上传到阿里云OSS服务器上:
https://i-blog.csdnimg.cn/direct/990034c641124be29b6a786ac169237f.png
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("//") + "//" + bucketName + "." + endpoint.split("//") + "/" + 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测试:
https://i-blog.csdnimg.cn/direct/98347542cb6642e893e0efff25a26d68.png
如许就成功上传图片啦,data返回的就是图片的数据。
四、总结
在Spring Boot中实现文件上传功能需要设置项目依赖、创建控制器处置惩罚文件上传哀求、设置文件巨细限定、编写HTML表单供用户选择文件,并确保存储目录存在。启动应用后,可以通过访问上传表单举行测试,同时要注意文件类型查抄和异常处置惩罚,以提升安全性和用户体验。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]