当前位置:首页 » 《关注互联网》 » 正文

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

12 人参与  2024年10月31日 09:22  分类 : 《关注互联网》  评论

点击全文阅读


一、什么是阿里云存储?

阿里云对象存储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;@Componentpublic 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@RestControllerpublic 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表单供用户选择文件,并确保存储目录存在。启动应用后,可以通过访问上传表单进行测试,同时要注意文件类型检查和异常处理,以提升安全性和用户体验。


点击全文阅读


本文链接:http://zhangshiyu.com/post/180299.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1