SpringBoot整合OSS

主要步骤如下:

前提是开通了阿里云OSS服务,然后;

1.引入依赖

2.获取关键参数,如endpoint,accessKeyId等,这个进入阿里云OSS控制台即可获取

3.建一个文件上传工具类

4.调用工具类,上传文件

1.pom.xml

<dependency>
	<groupId>com.aliyun.oss</groupId>
	<artifactId>aliyun-sdk-oss</artifactId>
	<version>2.8.3</version>
</dependency>
<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-lang3</artifactId>
	<version>3.8.1</version>
</dependency>

2.配置文件

注意:为了以后的拓展性,代码和配置解耦,我这里会专门建一个配置文件,然后在使用时直接从配置类中获取,而不是写死在java代码中。所以2,3两步不是必须的,作用只是规范的使用相关配置参数,若觉得麻烦,学习时,可直接在java代码中写死。

application.yml  这里是我定义的一些必要常量

#OSS
oos:
  file:
    endpoint: oss-cn-shanghai.aliyuncs.com 不同的服务器,地址不同
    keyid: 去OSS控制台获取
    keysecret: 去OSS控制台获取
    bucketname: bucket命名
    filehost: blog 文件路径,我这里是blog

3.使用   UploadController.java

package com.java4all.controller;
 
import com.java4all.utils.AliyunOSSUtil;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
 
import java.io.File;
import java.io.FileOutputStream;
 
@Controller
@RequestMapping("upload")
public class UploadController {

    /**
     * 文件上传
     * @param file
     */
    @RequestMapping(value = "uploadBlog",method = RequestMethod.POST)
    public String uploadBlog(@RequestParam("file") MultipartFile file){
 
        logger.info("============>文件上传");
        try {
            String filename = file.getOriginalFilename();
            File newFile = new File(filename);
            String uploadUrl = AliyunOSSUtil.upload(newFile);
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return "index";
    }
 
}

4.工具类  AliyunOSSUtil.java

package com.java4all.utils;
 
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.java4all.config.ConstantProperties;
import org.slf4j.LoggerFactory;
 
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class AliyunOSSUtil {
 
    @Value("${oos.file.endpoint}")
    private static String  endpoint;
    @Value("${oos.file.keyid}")
    private static String  keyid;
    @Value("${oos.file.keysecret}")
    private static String  keysecret;
    @Value("${oos.file.bucketname}")
    private static String  bucketname;
    @Value("${oos.file.filehost}")
    private static String  filehost;
 
 
    public static String upload(File file){
 
        //文件新路径
        String fileName = file.getOriginalFilename();
        try {
            File newFile = new File(fileName);
            FileOutputStream os = new FileOutputStream(newFile);
            os.write(file.getBytes());
            os.close();
            file.transferTo(newFile);
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            String dateStr = format.format(new Date());
            OSSClient ossClient = new OSSClient(endpoint,keyid,keysecret);
            //创建文件路径
            String fileUrl = filehost+"/"+(dateStr + "/" + UUID.randomUUID().toString().replace("-","")+"-"+file.getName());
			// 上传到阿里云
			ossClient.putObject(new PutObjectRequest(bucketname, fileUrl, newFile));
			if(null != result){
                return fileUrl;
            }
        }catch (OSSException oe){
            logger.error(oe.getMessage());
        }catch (ClientException ce){
            logger.error(ce.getMessage());
        }finally {
            //关闭
            ossClient.shutdown();
        }
        return null;
    }
}

5.页面  upload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>文件上传</title>
</head>
    <body>
        <form method="POST" enctype="multipart/form-data" action="/upload/uploadBlog">
            <p>文件:<input type="file" name="file"/></p>
            <p><input type="submit" value="上传" /></p>
        </form>
    </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值