SpringBoot学习05(2.1整合项目2:升级点文件上传阿里云OSS,分页插件以及日志信息)
在项目一的基础开发上升级点:
1.(表现层)不再使用systemout输出一些信息,而是在日志中输入,lombok中有提供响应的方法可以通过加入注解@Slf4j,就可以直接使用log.info("")更新日志信息。
2.(分页)配置新插件Pagehelper
在pom.xml中引入依赖,要根据自己的jdk版本来选择对应的版本
<!-- PageHelper依赖--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.1</version> </dependency>
3.文件上传
前端页面:在表单中要写这个属性
<form method = "post" enctype = "multipart/form-data">
<input type = "file" name="image">
</form>
服务端接受文件:
MultipartFile image
存储方式:本地存储和云存储
云存储阿里云OSS:需要先加入阿里云官网,进行注册登录,进入控制台,点击左上角,然后查找oss,第一次使用是没有东西的需要开通,根据自己需求选择是否购买,我并没有选择购买
创建bucket
获取密钥
创建密钥的时候要记住密码,不然不能查看了
查找官方文档SDK编写入门文件上传程序
官方文档: SDK参考_对象存储 OSS-阿里云帮助中心 (aliyun.com)
找到官方文档的上传文件流,进行复制粘贴
运行Demo
代码:Demo
package com.example; import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.common.auth.*; 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 Demo { public static void main(String[] args) throws Exception { // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 String endpoint = "https://oss-cn-beijing.aliyuncs.com"; // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 // EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); String accessKeyId = ""; String accessKeySecret = ""; // 填写Bucket名称,例如examplebucket。 String bucketName = "web-tlias29"; // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。 String objectName = "1.jpg"; // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。 // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。 String filePath= "D:\\images\\1.jpg"; // 创建OSSClient实例。 // OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); try { InputStream inputStream = new FileInputStream(filePath); // 创建PutObjectRequest对象。 PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream); // 创建PutObject请求。 PutObjectResult result = ossClient.putObject(putObjectRequest); } 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(); } } } }
项目集成OSS
postman测试成功,进入阿里云上面查看,也发现上传文件成功
总代码
UploadController.java
package com.example.controller; import com.example.entity.Result; import com.example.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 { //输入Component @Autowired private AliOSSUtils aliOSSUtils; @PostMapping("/upload") public Result upload(MultipartFile image) throws IOException { log.info("文件上传,文件名: {}", image.getOriginalFilename()); //调用阿里云OSS工具类进行上传 String url = aliOSSUtils.upload(image); log.info("文件上传完成,文件访问的url为:{}",url); return Result.success(url); } }
AliOSSUtils.java
package com.example.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 public class AliOSSUtils { private String endpoint = "https://oss-cn-beijing.aliyuncs.com"; private String accessKeyId = ""; private String accessKeySecret = ""; private String bucketName = "web-tlias29"; /** * 实现上传图片到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); //文件访问路径:上传到阿里云OSS的文件,可以通过https://bucketName.oss-cn-beijing.aliyuncs.com/fileName String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName; // 关闭ossClient ossClient.shutdown(); return url;// 把上传到oss的路径返回 } }