欢迎来到“雪碧聊技术”CSDN博客!
在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目心得。
让我们一同在Java的广阔天地中遨游,携手提升技术能力,共创美好未来!感谢您的关注与支持,期待在“雪碧聊技术”与您共同成长!
目录
一、阿里云OSS
1、什么是阿里云?
2、什么是阿里云OSS?
3、使用第三方服务的通用思路
(1)准备工作
①注册阿里云(实名认证)
②充值
③开通对象存储服务(OSS)
④创建bucket(又叫存储空间,是存放文件的容器)
⑤获取AccessKey(秘钥)
4、参照官网的SDK编写入门程序
①导入依赖
②编写代码,实现文件上传
endpoint 的获取方式
accessKeyId 的获取方式
accessKeySecret的获取方式:目前无法查询了,忘了的话,就在创建一个accessKey。
bucketName 的获取方式
③运行效果
5、编写AliOssUtil工具类,在项目中使用
①该工具类的注意事项
②在项目中使用AliOssUtils工具类完成文件上传及url获取
③重启项目,查看效果
二、总结
结语
一、阿里云OSS
1、什么是阿里云?
阿里云是阿里巴巴集团旗下全球领先的云计算公司,也是国内最大的云服务提供商。
注意:“云”,可以理解为互联网;“云服务”,可以理解为通过互联网获得的服务。
2、什么是阿里云OSS?
OSS(Object Storage Service):对象存储服务。对象指的就是文件。
是由阿里云提供的。
通过OSS,我们可以通过网络随时存储和调用文本、图片、音频、视频等文件。
有了OSS这种云服务,我们就不再需要将前端上传的文件存储到本地了,而是直接上传到阿里云上面。
3、使用第三方服务的通用思路
(1)准备工作
-
①注册阿里云(实名认证)
跳过。
-
②充值
跳过。学生不用充值,可以免费体验几个月。
-
③开通对象存储服务(OSS)
-
④创建bucket(又叫存储空间,是存放文件的容器)
-
⑤获取AccessKey(秘钥)
这个AccessKey(秘钥),是为了证明你是阿里云OSS的合法用户。以后从后端往阿里云OSS上传文件时,需要用到这个AccessKey。
4、参照官网的SDK编写入门程序
①导入依赖
由于我们用的是JDK17,因此需要额外导入下面那几个依赖。
<!--阿里云oss依赖--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version></dependency><!--阿里云OSSjdk9以上版本所需要的额外依赖--><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version></dependency><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version></dependency>
②编写代码,实现文件上传
public class OSSTest01 {public static void main(String[] args) throws Exception {//必须的四大参数String endpoint = "https://oss-cn-beijing.aliyuncs.com";String accessKeyId = "你自己的accessKeyId ";String accessKeySecret = "你自己的accessKeySecret ";String bucketName = "你自己的bucket(存放文件的容器)";String objectName = "new01.gif";//将文件存入OSS时的名称String filePath = "C:\\Users\\jhj15\\Pictures\\new01.gif";//本地文件的路径//创建OSSClient实例OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try{InputStream inputStream = new FileInputStream(filePath);ossClient.putObject(bucketName, objectName, inputStream);}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();}}}
}
-
endpoint 的获取方式
-
accessKeyId 的获取方式
-
accessKeySecret的获取方式:目前无法查询了,忘了的话,就在创建一个accessKey。
-
bucketName 的获取方式
③运行效果
5、编写AliOssUtil工具类,在项目中使用
package com.example.yyzxproject.utils;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;/*** 阿里云 OSS 工具类*/
@Component //将该工具类交给spring的IOC容器管理,使用时直接注入即可
public class AliOSSUtils {private String endpoint = "https://oss-cn-beijing.aliyuncs.com";//这是北京,根据自己的来private String accessKeyId = "你自己的ID";private String accessKeySecret = "你自己的Secret";private String bucketName = "你自己的bucket";/*** 实现上传图片到OSS*/public String upload(MultipartFile file) throws IOException {// 获取上传的文件的输入流InputStream inputStream = file.getInputStream();// 避免文件覆盖String originalFilename = file.getOriginalFilename();//获取原文件的名称String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上传文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//文件访问路径String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}}
①该工具类的注意事项
- 加了@Component注解,交给了Spring容器管理,使用时直接注入即可。
- 形参只需要传入controller层接收到的MultipartFile对象即可。
- 该工具类的方法中,会自动拼接存入图片的url路径并返回出来。
②在项目中使用AliOssUtils工具类完成文件上传及url获取
@Slf4j
@RestController
public class UploadController {@Autowiredprivate AliOSSUtils aliOSSUtils;@PostMapping("/upload")public ResultVo upload(MultipartFile image) throws IOException {log.info("文件上传,文件名:{}",image.getOriginalFilename());//调用阿里云OSS工具类进行文件上传String url = aliOSSUtils.upload(image);log.info("文件上传完成,文件访问的url:{}",url);return new ResultVo ("200", url);}}
③重启项目,查看效果
使用Postman发送一个Post请求,参数是一张图片。
二、总结
结语
以上就是文件上传的全部内容,以后项目中需要用到文件上传这个功能,直接复制上面的AliOssUtils工具类使用即可。