目录
3. 引入OSS上传文件工具类 AliOSSUtils.java
一、OSS简介
阿里云的对象存储服务(Object Storage Service,简称OSS)提供了一个网络平台,用于数据的存储和访问。通过OSS,我们能够随时在网络上存储和检索包括文本、图像、音频和视频在内的多种非结构化数据文件。在OSS中,数据文件被作为对象存储于称作存储空间(bucket)的容器中。
以下是OSS支持的主要功能:
创建存储空间:用户可以创建一个或多个存储空间,并在每个存储空间中上传文件。
文件上传与管理:用户能够将文件上传至指定的存储空间,并进行相应的管理操作。
文件共享与下载:用户可以通过获取已上传文件的URL地址来实现文件的共享和下载。
设置访问权限:用户可以调整存储空间或文件的属性和元数据,以设定相应的访问权限。
管理控制台操作:用户可以在阿里云的管理控制台中执行OSS的基本和高级任务。
API调用:用户可以利用阿里云的开发工具包或直接通过RESTful API在应用程序中执行OSS的基本和高级操作。
二、OSS基本使用
1. 注册账号
打开 阿里云-计算,为了无法计算的价值,申请阿里云账号并完成实名认证
2. 基本配置
(1) 开通OSS
登录成功之后,点击右上角“控制台”
鼠标放在左上角三条横杠处,点击“对象存储”,打开OSS产品详情页面。在OSS产品详情页中的单击立即开通。
开通服务后,单击官网首页右上方菜单栏的控制台,进入阿里云管理控制台首页,然后单击左侧的对象存储OSS菜单进入 OSS管理控制台。
(2) 创建存储空间
新建Bucket,自定义名称,地域随便选,读写权限默认私有,创建完成后改为公共读。
按照图中选,其他默认就行,都是不开通或者关闭。
(3) 修改权限
完成创建之后,进入创建好的Bucket,点击左侧列表“权限控制”—“阻止公共访问”,关闭“阻止公共访问”,接下来按步骤走。
接下来,点击“读写权限”—“设置”,选择“公共读”,按步骤走即可。
(4) 配置完成,上传一张图片,检验是否成功。
“文件列表”—“上传文件”—“扫描文件” —选择一个文件 —“上传文件”
点击“详情”,进行下载
下载成功,则说明访问成功 !
(5) 创建AccessKey
鼠标移动到头像处,点击“AccessKey”。
点击“我确认...”—“继续使用”—“创建AccessKey”
继续使用即可。
创建完成就获得了AccessKey
三、Java项目集成OSS
参考官方文档:OSS Java SDK快速入门_对象存储(OSS)-阿里云帮助中心
1. 导入依赖
在Maven工程中使用OSS Java SDK,只需在pom.xml
中加入相应依赖即可。以在<dependencies>中加入3.17.4版本的依赖为例:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.4</version>
</dependency>
如果使用的是Java 9及以上的版本,则需要添加以下JAXB相关依赖:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.3</version>
</dependency>
2. Result.java代码:
package com.qcby.model;
public class Result<T> {
private int code;
private String message;
private T data;
private Result(int code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
public static <T> Result<T> success(T data) {
return new Result<>(200, "操作成功", data);
}
public static <T> Result<T> failure(int code, String message) {
return new Result<>(code, message, null);
}
// Getters and Setters
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
3. 引入OSS上传文件工具类 AliOSSUtils.java
package com.qcby.utils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
@Component
public class AliOSSUtils {
private String endpoint = "自己的";
private String accessKeyId = "自己的";
private String accessKeySecret = "自己的";
private String bucketName = "自己的";
/**
* 实现上传图片到OSS
*/
public String upload(MultipartFile multipartFile) throws IOException {
// 获取上传的文件的输入流
InputStream inputStream = multipartFile.getInputStream();
// 避免文件覆盖
String originalFilename = multipartFile.getOriginalFilename();
String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
//上传文件到 OSS
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
ossClient.putObject(bucketName, fileName, inputStream);
//文件访问路径
String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
// 关闭ossClient
ossClient.shutdown();
return url;// 把上传到oss的路径返回
}
}
3. UploadController:
package com.qcby.controller;
import com.qcby.model.Result;
import com.qcby.utils.AliOSSUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@Controller
public class UploadController {
@Autowired
private AliOSSUtils aliOSSUtils;
@ResponseBody
@RequestMapping("/upload")
public Result upload(MultipartFile image) throws IOException {
//调用阿里云OSS工具类,将上传上来的文件存入阿里云
String url = aliOSSUtils.upload(image);
//将图片上传完成后的url返回,用于浏览器回显展示
return Result.success(url);
}
}
4. 使用postman对接口进行测试
- 切换到 “Body”(正文)选项卡。
- 选择 “form-data” 作为正文类型。
- 在 “VALUE” 列中,使用选择文件按钮上传你想要测试的文件。