后端Java学习:springboot之文件上传(阿里云OSS存储)

打印 上一主题 下一主题

主题 1673|帖子 1673|积分 5019

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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,改造一下,即可实现文件上传功能:
  1. import com.aliyun.oss.ClientException;
  2. import com.aliyun.oss.OSS;
  3. import com.aliyun.oss.OSSClientBuilder;
  4. import com.aliyun.oss.OSSException;
  5. import com.aliyun.oss.model.PutObjectRequest;
  6. import com.aliyun.oss.model.PutObjectResult;
  7. import java.io.FileInputStream;
  8. import java.io.InputStream;
  9. public class AliOssTest {
  10.     public static void main(String[] args) throws Exception {
  11.         // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  12.         String endpoint = "oss-cn-shanghai.aliyuncs.com";
  13.         
  14.         // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  15.         String accessKeyId = "LTAI5t9MZK8iq5T2Av5GLDxX";
  16.         String accessKeySecret = "C0IrHzKZGKqU8S7YQcevcotD3Zd5Tc";
  17.         
  18.         // 填写Bucket名称,例如examplebucket。
  19.         String bucketName = "web-framework01";
  20.         // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
  21.         String objectName = "1.jpg";
  22.         // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
  23.         // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
  24.         String filePath= "C:\\Users\\Administrator\\Pictures\\1.jpg";
  25.         // 创建OSSClient实例。
  26.         OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  27.         try {
  28.             InputStream inputStream = new FileInputStream(filePath);
  29.             // 创建PutObjectRequest对象。
  30.             PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
  31.             // 设置该属性可以返回response。如果不设置,则返回的response为空。
  32.             putObjectRequest.setProcess("true");
  33.             // 创建PutObject请求。
  34.             PutObjectResult result = ossClient.putObject(putObjectRequest);
  35.             // 如果上传成功,则返回200。
  36.             System.out.println(result.getResponse().getStatusCode());
  37.         } catch (OSSException oe) {
  38.             System.out.println("Caught an OSSException, which means your request made it to OSS, "
  39.                     + "but was rejected with an error response for some reason.");
  40.             System.out.println("Error Message:" + oe.getErrorMessage());
  41.             System.out.println("Error Code:" + oe.getErrorCode());
  42.             System.out.println("Request ID:" + oe.getRequestId());
  43.             System.out.println("Host ID:" + oe.getHostId());
  44.         } catch (ClientException ce) {
  45.             System.out.println("Caught an ClientException, which means the client encountered "
  46.                     + "a serious internal problem while trying to communicate with OSS, "
  47.                     + "such as not being able to access the network.");
  48.             System.out.println("Error Message:" + ce.getMessage());
  49.         } finally {
  50.             if (ossClient != null) {
  51.                 ossClient.shutdown();
  52.             }
  53.         }
  54.     }
  55. }
复制代码
  在以上代码中,需要更换的内容为:
  

  • accessKeyId:阿里云账号AccessKey
  • accessKeySecret:阿里云账号AccessKey对应的秘钥
  • bucketName:Bucket名称
  • objectName:对象名称,在Bucket中存储的对象的名称
  • filePath:文件路径
  AccessKey :
  

   运行以上程序后,会把本地的文件上传到阿里云OSS服务器上:

4.集成代码

阿里云oss对象存储服务的准备工作以及入门程序我们都已经完成了,接下来我们就需要在案例当中集成oss对象存储服务,来存储和管理案例中上传的图片。
引入阿里云OSS上传文件工具类(由官方的示例代码改造而来)
  1. import com.aliyun.oss.OSS;
  2. import com.aliyun.oss.OSSClientBuilder;
  3. import org.springframework.stereotype.Component;
  4. import org.springframework.web.multipart.MultipartFile;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.util.UUID;
  8. @Component
  9. public class AliOSSUtils {
  10.     private String endpoint = "https://oss-cn-shanghai.aliyuncs.com";
  11.     private String accessKeyId = "LTAI5t9MZK8iq5T2Av5GLDxX";
  12.     private String accessKeySecret = "C0IrHzKZGKqU8S7YQcevcotD3Zd5Tc";
  13.     private String bucketName = "web-framework01";
  14.     /**
  15.      * 实现上传图片到OSS
  16.      */
  17.     public String upload(MultipartFile multipartFile) throws IOException {
  18.         // 获取上传的文件的输入流
  19.         InputStream inputStream = multipartFile.getInputStream();
  20.         // 避免文件覆盖
  21.         String originalFilename = multipartFile.getOriginalFilename();
  22.         String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
  23.         //上传文件到 OSS
  24.         OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
  25.         ossClient.putObject(bucketName, fileName, inputStream);
  26.         //文件访问路径
  27.         String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
  28.         // 关闭ossClient
  29.         ossClient.shutdown();
  30.         return url;// 把上传到oss的路径返回
  31.     }
  32. }
复制代码
修改UploadController代码:
  1. import com.itheima.pojo.Result;
  2. import com.itheima.utils.AliOSSUtils;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.PostMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. import org.springframework.web.multipart.MultipartFile;
  8. import java.io.IOException;
  9. @Slf4j
  10. @RestController
  11. public class UploadController {
  12.     @Autowired
  13.     private AliOSSUtils aliOSSUtils;
  14.     @PostMapping("/upload")
  15.     public Result upload(MultipartFile image) throws IOException {
  16.         //调用阿里云OSS工具类,将上传上来的文件存入阿里云
  17.         String url = aliOSSUtils.upload(image);
  18.         //将图片上传完成后的url返回,用于浏览器回显展示
  19.         return Result.success(url);
  20.     }
  21.    
  22. }
复制代码
使用postman测试:

   如许就成功上传图片啦,data返回的就是图片的数据。
  四、总结

在Spring Boot中实现文件上传功能需要设置项目依赖、创建控制器处置惩罚文件上传哀求、设置文件巨细限定、编写HTML表单供用户选择文件,并确保存储目录存在。启动应用后,可以通过访问上传表单举行测试,同时要注意文件类型查抄和异常处置惩罚,以提升安全性和用户体验。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表