后端上传文件使用阿里云oss存储文件(图片)

1,pom.xml安装依赖

        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.10.2</version>
        </dependency>

2,application.yml配置

aliyun:
  oss:
    file:
      # oss对外服务的访问域名
      endpoint: oss-cn-beijing.aliyuncs.com
      # 访问身份验证中用到用户标识
      accessKeyId: 
      # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
      accessKeySecret: 
      # oss的存储空间
      bucketName: 
    # 上传文件大小(M)
    maxSize: 3
    # 上传文件夹路径前缀
    dir:
      prefix: images/

3,读取配置文件application.yml中的配置

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * @description: 常量类,读取配置文件application.yml中的配置
 **/
@Component
public class ConstantPropertiesUtil implements InitializingBean {        //用spring的 InitializingBean 的 afterPropertiesSet 来初始化配置信息,这个方法将在所有的属性被初始化后调用。
    @Value("${aliyun.oss.file.endpoint}")
    private String endpoint;
    @Value("${aliyun.oss.file.accessKeyId}")
    private String keyId;
    @Value("${aliyun.oss.file.accessKeySecret}")
    private String keySecret;
    @Value("${aliyun.oss.file.bucketName}")
    private String bucketName;



    public static String END_POINT;
    public static String ACCESS_KEY_ID;
    public static String ACCESS_KEY_SECRET;
    public static String BUCKET_NAME;

    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT = endpoint;
        ACCESS_KEY_ID = keyId;
        ACCESS_KEY_SECRET = keySecret;
        BUCKET_NAME = bucketName;
    }
}

4,Service层接口

import org.springframework.web.multipart.MultipartFile;

public interface IOssService {
    //上传头像oss
    String uploadFile(MultipartFile file);

}

5,实现接口

import com.MyBlog.mBlog.util.ConstantPropertiesUtil;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
//import com.xii.oss.utils.ConstantPropertiesUtil;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

@Service
class OssServiceimpl implements IOssService {
    @Override
    public String uploadFile(MultipartFile file) {
        //使用阿里云OSS官方文档api

        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String endpoint = ConstantPropertiesUtil.END_POINT;
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
        // 填写Bucket名称,例如examplebucket。
        String bucketName = ConstantPropertiesUtil.BUCKET_NAME;
        // 填写文件名。文件名包含路径,不包含Bucket名称。例如exampledir/exampleobject.txt。
        OSS ossClient = null;
        try {
            //创建OSSClient实例。
            ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            //获得上传文件的输入流
            InputStream inputStream = file.getInputStream();
            //调用oss方法实现上传ossClient.putObject里面有三个参数
            //第一个参数 buctet名称
            //二  上传oss文件路径和文件名称
            //三  文件的输入流

            //获得文件名称
            String filename = file.getOriginalFilename();
            //如果文件名字相同的话 会覆盖文件  所以使用uuid    替换字符串
            String uuid = UUID.randomUUID().toString().replace("-", "");
            filename = uuid + filename;
            //文件按照日期做分类 url中/为文件夹分级  这里使用依赖工具类
            //构建日期路径:avatar/2019/02/26/文件名.jpg
            String filePath = new DateTime().toString("yyyy/MM/dd");
            filename = filePath + "/" + filename;
            //执行上传
            ossClient.putObject(bucketName, filename, inputStream);
            //获取 拼接url地址
            String uploadUrl = "http://" + bucketName + "." + endpoint + "/" + filename;
            //返回全部路径用于存储数据库中
            return uploadUrl;
        } catch (OSSException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭OSSClient。
            ossClient.shutdown();
        }
        return null;
    }
}

 一个小demo。 前端向后端传文件,后端Controller层接收

import com.aliyuncs.exceptions.ClientException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

@Api("阿里云文件管理")
@CrossOrigin //跨域
@RestController
@RequestMapping("/user/oss/")
public class FileController {
    //@Autowired
    //private FileService fileService;
    @Autowired
    IOssService iOssService;

    /**
     * 文件上传
     *
     * @param file
     */
    @ApiOperation(value = "文件上传")
    @PostMapping("upload/")
    public CommonData upload(
            @ApiParam(name = "file", value = "文件", required = true)
            @RequestParam("file") MultipartFile file) throws ClientException {
        iOssService.uploadFile(file);
        return new CommonData(200, "上传成功!");
    }
}

最近更新

  1. TCP协议是安全的吗?

    2024-04-11 23:16:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-11 23:16:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-11 23:16:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-11 23:16:03       18 阅读

热门阅读

  1. 【综合分析类】一号文件:绿色发展

    2024-04-11 23:16:03       16 阅读
  2. 如何在Linux中安装NVM(Node Version Manager)

    2024-04-11 23:16:03       20 阅读
  3. 最近公共祖先(LCA)

    2024-04-11 23:16:03       15 阅读
  4. 测试 OpenSIPS 3.4 的 stun 模块

    2024-04-11 23:16:03       15 阅读
  5. 三、Redis持久化

    2024-04-11 23:16:03       14 阅读
  6. 代码审计中应注意的命令执行函数以及命令

    2024-04-11 23:16:03       12 阅读
  7. IJKPLAYER源码分析-OpenSL ES播放

    2024-04-11 23:16:03       14 阅读