欢迎来到“雪碧聊技术”CSDN博客!
在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目心得。
让我们一同在Java的广阔天地中遨游,携手提升技术能力,共创美好未来!感谢您的关注与支持,期待在“雪碧聊技术”与您共同成长!
目录
accessKeySecret的获取方式:目前无法查询了,忘了的话,就在创建一个accessKey。
②在项目中使用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("."));
//上传文件到 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的路径返回
}
}
①该工具类的注意事项
- 加了@Component注解,交给了Spring容器管理,使用时直接注入即可。
- 形参只需要传入controller层接收到的MultipartFile对象即可。
- 该工具类的方法中,会自动拼接存入图片的url路径并返回出来。
②在项目中使用AliOssUtils工具类完成文件上传及url获取
@Slf4j
@RestController
public class UploadController {
@Autowired
private 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工具类使用即可。
标签:文件,JavaWeb,url,OSS,阿里,上传,String From: https://blog.csdn.net/qq_63981644/article/details/143660611