阿里云OSS客户端SDK集成和测试存储服务(涉及文件上传)

DBC 1.8K 0
添加pom
    <!-- OSS各个项目单独加依赖,根据需要进行添加-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.10.2</version>
        </dependency>
配置文件添加
#阿里云OSS配置
aliyun:
  oss:
    endpoint: oss-cn-shenzhen.aliyuncs.com
    access-key-id: LTAI4GJR7bL8JEzBv7zx69J4
    access-key-secret: CNfxHJeTTLlFQA2a2X5BprjqjK047l
    bucketname: xdclass-1024shop-img

阿里云OSS客户端SDK集成和测试存储服务(涉及文件上传)插图

中间那两个,就是生成的时候出现的,说了只出现一次的,我这里就不放出来了!

这里弄一个配置类
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@ConfigurationProperties(prefix = "aliyun.oss")
@Configuration
@Data
public class OSSConfig {

    private String endpoint;

    private String accessKeyId;

    private String accessKeySecret;

    private String bucketname;

}
现在完成了基本的配置,接下来我们创建一个service,一个impl类,并且在usercontroller里面尝试直接上传的操作,代码依次放出
import org.springframework.web.multipart.MultipartFile;

public interface FileService {
     String uploadUserImg(MultipartFile file);
}
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import lombok.extern.slf4j.Slf4j;
import net.xdclass.config.OSSConfig;
import net.xdclass.service.FileService;
import net.xdclass.utils.CommonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.sql.rowset.serial.SerialStruct;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Service
@Slf4j
public class FileServiceImpl implements FileService {
    @Autowired
    private OSSConfig ossConfig;
    @Override
    public String uploadUserImg(MultipartFile file) {
        //获取相关配置
        String bucketname = ossConfig.getBucketname();
        String endpoint = ossConfig.getEndpoint();
        String accessKeyId = ossConfig.getAccessKeyId();
        String accessKeySecret = ossConfig.getAccessKeySecret();
        //创建OSS对象
        OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);
        //获取原生文件名
        String originalFileName = file.getOriginalFilename();
        //JDK8的日期格式 _获取当前时间
        LocalDateTime ldt = LocalDateTime.now();
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");

        //拼装路径,oss上的存储的路径   2022/13/1/qweqwe.jpg
        String folder = dtf.format(ldt);
        String fileName = CommonUtil.generateUUID();
        String extension = originalFileName.substring(originalFileName.lastIndexOf("."));


        String newFileName = "user/"+folder+"/"+fileName+extension;


        try {
            PutObjectResult putObjectResult = ossClient.putObject(bucketname,newFileName,file.getInputStream());
            //拼装返回路径
            if (putObjectResult!=null){
               String imgUrl =  "https://"+bucketname+"."+endpoint+"/"+newFileName;
               return imgUrl;
            }
        } catch (IOException e) {
            log.error("文件上传失败:"+e);
        }finally {
            //oss关闭服务,不然回造成OOM(内存泄露)
            ossClient.shutdown();
        }
        return null;
    }
}
    @Autowired
    private FileService fileService;

    /**
     * 上传用户头像
     * @param file
     * @return
     */
    @ApiOperation("用户头像上传")
    @PostMapping(value = "upload")
    public JsonData uploadUserImg(
            @ApiParam(value = "文件上传",required = true)
            @RequestPart("file")MultipartFile file){

        String result = fileService.uploadUserImg(file);


        return result!=null?JsonData.buildSuccess(result):JsonData.buildResult(BizCodeEnum.FILE_UPLOAD_USER_IMG_FAIL);
    }
}
三步走之后我们就已经实现了,让我们来测试一下吧

阿里云OSS客户端SDK集成和测试存储服务(涉及文件上传)插图2

来到阿里OSS对象存储,我们可以看到,已经上传成功啦

阿里云OSS客户端SDK集成和测试存储服务(涉及文件上传)插图4

博主提示

这里要说明一下,因为SpringBoot默认是只能上传1M的文件,不知道Spring2.X有没有改过配置,这里我们可以手动更改配置为你想要的!下面给出关键代码

spring:
  servlet:
    multipart:
      max-file-size: 30MB
      max-request-size: 30MB
OK,大功告成!这一波又学习了文件上传,又学习了OSS的存储!

发表评论 取消回复
表情 图片 链接 代码

分享