app09-后端接口阿里云OSS上传服务和本地上传服务

开通阿里云OSS

开通后创建bunket

依赖

<!-- 阿里云oss依赖 -->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
        </dependency>

application.properties

#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=oss-cn-shanghai.aliyuncs.com
aliyun.oss.file.keyid=12LTAI5tNTmM7cf4Xasbzd3Q5MC12
aliyun.oss.file.keysecret=12LJMCNiwczE3vfZVJLdajGI7t0SFZ6pA12
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=shengun1

#上传到本地存储
images.native.save=D:/pdf/images/
images.nginx.url=http://localhost:81/

#SpringBoot上传限制大小
#是设置单个文件的大小,
spring.servlet.multipart.max-file-size = 100MB
#是设置单次请求的文件的总大小
spring.servlet.multipart.max-request-size = 150MB

管理配置ConstantPropertiesUtil

package com.shengun.oss.utills;

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

@Component
public class ConstantPropertiesUtil implements InitializingBean {

    @Value("${aliyun.oss.file.endpoint}")
    private String endpoint;
    @Value("${aliyun.oss.file.keyid}")
    private String keyid;
    @Value("${aliyun.oss.file.keysecret}")
    private String keysecret;
    @Value("${aliyun.oss.file.bucketname}")
    private String bucketname;
    @Value("${images.native.save}")
    private String nativeSave;
    @Value("${images.nginx.url}")
    private String nginxUrl;

    public static String END_POINT;
    public static String KEY_ID;
    public static String KEY_SECRET;
    public static String BUCKET_NAME;
    public static String NATIVE_SAVE;
    public static String NGINX_URL;

    @Override
    public void afterPropertiesSet() throws Exception {
        END_POINT = endpoint;
        KEY_ID = keyid;
        KEY_SECRET = keysecret;
        BUCKET_NAME = bucketname;
        NATIVE_SAVE = nativeSave;
        NGINX_URL = nginxUrl;
    }
}

OssService

package com.shengun.oss.service;

import org.springframework.web.multipart.MultipartFile;

public interface OssService {
    public String uploadFileAvatar(MultipartFile file);

    public String uploadNativeAvatar(MultipartFile file);
}

OssServiceImpl

package com.shengun.oss.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.shengun.oss.service.OssService;
import com.shengun.oss.utills.ConstantPropertiesUtil;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Service
@Slf4j
public class OssServiceImpl implements OssService {

    /**
     * 上传到阿里云oss
     * @param file 上传文件流
     * @return
     */
    @Override
    public String uploadFileAvatar(MultipartFile file) {
        // OSS上传四个参数
        String endPoint = ConstantPropertiesUtil.END_POINT;
        String keyId = ConstantPropertiesUtil.KEY_ID;
        String keySecret = ConstantPropertiesUtil.KEY_SECRET;
        String bucketName = ConstantPropertiesUtil.BUCKET_NAME;

        InputStream inputStream = null;

        try {
            OSS ossClient = new OSSClientBuilder().build(endPoint, keyId, keySecret);

            //获取文件上传输入流
            inputStream = file.getInputStream();

            //获取文件名称
            String filename = file.getOriginalFilename();

            //1、UUID值
            String uuid = UUID.randomUUID().toString().replace("-","");
            filename  = uuid + filename;

            //2、日期时间
            String dataPath = new DateTime().toString("yyyy/MM/dd");

            //拼接
            filename = dataPath + "/" + filename;

            log.info("#################上传文件名称:" + filename);

            //调用oss实例中的方法实现上传
            //参数1: Bucket名称
            //参数2: 上传到oss文件路径和文件名称 aa/bb/1.jpg
            //参数3: 上传文件的输入流
            ossClient.putObject(bucketName, filename, inputStream);
            //关闭
            ossClient.shutdown();
            String url = "https://" + bucketName + "." + endPoint + "/" + filename;
            log.info("#################上传成功url:" + url);
            return  url;
        }catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 上传到本地
     * @param file 上传文件流
     * @return
     */
    @Override
    public String uploadNativeAvatar(MultipartFile file) {
        //本地存储路径
        String nativeSave = ConstantPropertiesUtil.NATIVE_SAVE;
        //通过nginx做负载
        String nginxUrl  = ConstantPropertiesUtil.NGINX_URL;

        String returnUrl = "";

        //原来的名称
        String fileName = file.getOriginalFilename();
        //获取文件后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        //重新生成文件名
        fileName = UUID.randomUUID()+suffixName;
		//根据时间创建出时间目录,也就是2022/04/18日期的文件存在在2022/04/18目录下
        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
        String savePath = format.format(new Date());
        savePath = nativeSave + savePath;
        File fileDataPath = new File(savePath);
        if(!fileDataPath.exists()){
            log.info("#######路径不存在,创建路径:" + savePath);
            fileDataPath.mkdirs();
        }
        //上传操作
        savePath = savePath + "/" +fileName;
        try {
            //上传
            file.transferTo(new File(savePath));
            log.info("#################上传成功保存本地路径:" + savePath);
            returnUrl = nginxUrl + savePath.replace(nativeSave, "");
            log.info("#################上传成功保存url:" + returnUrl);
            return returnUrl;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

OssController

package com.shengun.oss.conrtoller;

import com.shengun.commonutils.R;
import com.shengun.oss.service.OssService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.Map;

/**
 * 通过swagger来测试接口
 * http://localhost:8002/swagger-ui.html
 */
@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin
public class OssController {

    @Autowired
    private OssService ossService;

    @PostMapping("/upload")
    public R uploadOssFile(MultipartFile file){
        String url = ossService.uploadFileAvatar(file);
        return R.ok().data("url", url).message("文件上传成功!");
    }

    @PostMapping("/uploadNative")
    public R uploadNativeFile(MultipartFile file){
        String url = ossService.uploadNativeAvatar(file);
        return R.ok().data("url",url).message("文件上传成功!");
    }
}

测试,使用swigger测试,也可以使用前端调用

我这里的接口都是可以跨域名的
在这里插入图片描述

先测试阿里云的

在这里插入图片描述

测试本地的

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值