OSS文件上传全流程
OSS 文件上传全流程
网页操作
-
第一步 登陆阿里云搜索OSS
-
第二步开通 OSS
-
开通后,点击进入控制台开始操作了,创建一个bucket(桶)这个名称记录一下后面要用
- 创建样板跟我一样就行,具体意思可以参照官方文档
- 创建完成后进入此页面
- 上传个文件测试一下
- 选择个图片上传一下
当上传完成后 点击文件管理 能看到上传文件
- 那么怎么访问呢???
- 这样就可以下载我的文件了
那么网页版的也差不多了该上实际代码了 go,go,go
Java方式上传文件
- 创建springboot项目导入依赖
创建项目这个我是真的不想说了
<!--aliyunOSS-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--aliyunOSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
-
配置yml文件 前提找到这三个配置信息
- 这里找到地址
- 这里找到地址
-
这里找到keyid和秘钥
那么有这个三个东西千万别忘记你创建的bucket名称
- 配置文件
#服务端口
server:
port: 8888
spring:
application:
name: service-oss
servlet:
multipart:
max-request-size: 10MB # 设置文件大小
aliyun:
oss:
file:
endpoint: oss-cn-beijing.aliyuncs.com # 地址
keyid: # keyid
keysecret: # 秘钥
bucketname: # 这是你的创建bucket的名称
做一个接口试试:
- controller
package cn.chy.com.controller;
import cn.chy.com.service.OssService;
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 javax.annotation.Resource;
/**
* @Description: TODO
* @author: 颜淮川
* @date: 2021年10月09日 23:27
*/
@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin
public class OssController {
@Resource
private OssService ossService;
@PostMapping
public String uploadFile(MultipartFile file) {
String url = ossService.uploadFileAvatar(file);
System.out.println(url);
return url;
}
}
- service 接口
package cn.chy.com.service;
import org.springframework.web.multipart.MultipartFile;
/**
* @Description: TODO
* @author: 颜淮川
* @date: 2021年10月09日 23:27
*/
public interface OssService {
/*
上传头像到Oss
*/
String uploadFileAvatar(MultipartFile file);
}
- serviceImpl
package cn.chy.com.service;
import cn.chy.com.util.ContactPropertiesUtils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
/**
* @Description: TODO
* @author: 颜淮川
* @date: 2021年10月09日 23:27
*/
@Service
public class OssServiceImpl implements OssService {
@Override
public String uploadFileAvatar(MultipartFile file) {
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = ContactPropertiesUtils.END_POINT;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = ContactPropertiesUtils.ACCESS_KEY_ID;
String accessKeySecret = ContactPropertiesUtils.ACCESS_KEY_SECRET;
String bucketName = ContactPropertiesUtils.BUCKET_NAME;
try {
// 获取文件名称
String realName = file.getOriginalFilename();
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
InputStream inputStream = file.getInputStream();
// 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
ossClient.putObject(bucketName, realName, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
String url = "https://" + bucketName + "." + endpoint + "/" + realName;
return url;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
- 借助工具类
package cn.chy.com.util;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* @Description: TODO
* @author: 颜淮川
* @date: 2021年10月09日 23:19
*/
@Component
public class ContactPropertiesUtils 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;
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;
}
}
混口饭吃,: 自己拼接的 可以自己返回也可以不返回
躺着听Jay: 最后是不是会返回一个图片的url
五忴: i了
北瑟: 都是好人一起平安
飞奔的花露水: 好人一生平安