一、阿里云OSS注册与使用
1.登录阿里云官网
- 通过点击右上角的登录注册按钮进行下一步
2.登录注册
进行注册登录后会有个人身份验证操作,可以通过支付宝账号快速实名
3.搜索"对象存储 OSS"或者"OSS"
4.点击立即购买
注意:首次使用会有3个月的免费试用,内存20g
5.按需购买存储空间
6.购买完成回到上一个页面点击管理控制台或者直接进入管理控制台
7. 点击"Bucket列表"进入页面
8.创建Bucket
以下容器选择按需就行,注意:读写权限选择私有就无法公共访问,访问时需要加上身份后缀,可能导致身份信息泄露
9.创建完成后点击进入bucket
10.当点入的时候就可以看到内存中的文件
这里默认就是空文件夹
二、使用阿里云OSS
对于使用方法可以直接观看官方文档
阿里云OSS对象存储官方文档链接
直接开发参考(这里使用的是Java为例)
如果需要其他语言的教程,可以以此为例进行使用。
1.安装SDK
这里官方使用的是
在Maven工程中使用OSS Java SDK,只需在pom.xml中加入相应依赖即可。在中加入如下内容:
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
如果使用的是Java 9及以上的版本,则需要添加JAXB相关依赖。添加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.如果按照官方的文档步骤来这里需要先配置环境变量
但是我为了方便就不配置环境了,直接去使用
3.快速入门
我的代码对一些非固定的属性写在了application.yml文件中了,方便后期云端口变了好更改
- application.yml配置文件中的代码
aliyun:
OSS:
endpoint: Endpoint的服务端点(例子:https://oss-cn-beijing.aliyuncs.com)
accessKeyId: 访问凭证
accessKeySecret: 访问凭证的密钥
objectName : 存储空间内的文件地址
bucketName : 就是bucket的名称
例子:
aliyun:
OSS:
endpoint: https://oss-cn-beijing.aliyuncs.com
accessKeyId: LTAI***********iehvy4
accessKeySecret: Jm8A*************lAE
objectName : exampledir/
bucketName : chen-buck
- endpoint获取
- accessKeyId和accessKeySecret获取
第二部点击进去创建AccessKey
- bucketName就是一开始创建的名
3.1 上传代码
package com.wedu.modules.fileCunChu;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
@Component
public class AliOssStorage {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
@Value("${aliyun.OSS.endpoint}")
private String endpoint;
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
@Value("${aliyun.OSS.accessKeyId}")
private String accessKeyId;
@Value("${aliyun.OSS.accessKeySecret}")
private String accessKeySecret;
@Value("${aliyun.OSS.objectName}")
private String objectName;
// 填写Bucket名称,例如examplebucket。
@Value("${aliyun.OSS.bucketName}")
private String bucketName ;
/**
* @param file 前端传入所接收的文件
* @param name 起的文件名称
* @return
* @throws Exception
*/
@Override
public String FileStorage(MultipartFile file, String name) throws Exception {
// 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
String objectName1=objectName+name;
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId,accessKeySecret);
try {
//创建Put0bjectRequest对象。
PutObjectRequest putObjectRequest=new PutObjectRequest(bucketName,objectName1,file.getInputStream());
//设置该属性可以返回response。如果不设置,则返回的response为空。
putObjectRequest.setProcess("true");
//创建PutObject请求。
PutObjectResult result=ossClient.putObject(putObjectRequest);
//如果上传成功,则返回200。
System.out.println(result.getResponse().getStatusCode());
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
//返回Url
//这里的url就是文件存储到云端的地址它是由
// https: // bucket名称 . 服务端口 / 文件地址/文件名
//https://chen-buck.oss-cn-beijing.aliyuncs.com/exampledir/a21a1f5e-c218-4991-adf9-374af000b268.jpg
String url=endpoint.split("//")[0]+"//"+bucketName+"."+endpoint.split("//")[1]+"/"+objectName1;
return url;
}
}
controller层的代码
package com.wedu.modules.excleUpOrDo;
import com.alibaba.excel.EasyExcel;
import com.wedu.common.utils.R;
import com.wedu.modules.fileCunChu.AliOssStorage;
import com.wedu.modules.sys.controller.AbstractController;
import com.wedu.modules.sys.service.PromptInformationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
@RestController
@RequestMapping("/excle")
public class ExcleUpOrDoController extends AbstractController {
//注入阿里云工具类(上面所写的类)
@Autowired
AliOssStorage donPath;
//文件导入
@PostMapping("/uplode")
public R uplodeExcle(@RequestPart("file")MultipartFile file) throws Exception {
//获取文件名
String filename=file.getOriginalFilename();
//获取文件扩展名
String[] strings=filename.split("\\.");
String KzName=strings[strings.length-1];
//通过UUID取文件名(也可以通过 时间+文件名+后缀的方式取名)
UUID randomString= UUID.randomUUID();
//拼接名称
String name =randomString+"."+KzName;
//本地上传
String s = donPath.FileStorage(file, name);
return R.ok().put("url",s);
}
}
测试
我这里通过接口上传了一张图片,接口成功接受并返回图片地址
可以通过该地址直接下载图片