阅读本文大概需要3分钟。
Hello,今天想跟大家分享一下我近期做的项目中使用的文件上传与文件下载,其实在以前我们想要做文件上传可能要自己去搭建一个专门的服务器,然后将我们的文件上传到这个服务器上,下载就从我们这个服务器上去进行下载就行了。
但是现在随着技术的发展,像阿里这样的公司给我们开发了好多一些专门的服务器来干这样的事情,根本不用我们自己再去搭建服务器,这样用起来确实可以省很多的事情,我们要做的只是购买一台云服务器,将配置参数配置配置就可以实现文件的上传与下载。
什么是OSS
那么什么是OSS呢?其实你可以这样理解,它就是阿里推出的一款云服务器,专门用来做文件存储的,这里需要知道OSS它的存储结构是对象存储,什么意思,就是说它是一个key-value的存储结构,它是支持任何非结构化(图片,视频,文件)数据的存储的。
开通一个属于自己的OSS
接下来我就带大家看一下,如何开通一个属于自己并且免费的OSS云服务器,首先我们要注册阿里云(我相信大家还是可以自己能注册的),注册好之后可能需要大家进行实名认证,大家认证一下即可。然后我们点击这个对象存储OSS,就可以进入。
进来之后大家可以看到我圈的这个地方应该是有一个开通的按钮的,因为我已经开通了,所以显示的是管理控制台。申请开通之后可能有一段时间的审核时间,应该不是很长10分钟就可以通过。
开通好了之后,我们就可以进入到我们的OSS管理控制台了,那么我们想要上传文件那么我们就必须先创建一个我们自己的存储空间。点击新建bucket就可以新建我们的存储空间。
在弹出的文本框中填写一下信息,这里大家只把Bucket名称填好就可以了,其他基本不用动。
创建好了之后,我们点击我们刚才创建的bucket名称,就可以看到我们这个存储空间的信息了。
接下来我们就来写一下代码:
代码撸起来
在上传之前我们先介绍OSS里面需要的几个配置参数
endpoint:这个东西其实就是你那台OSS服务器的访问地址,这个地址一般分为好几种,最好理解的就是它可以分为内网和外网,我们在选择时候一般选择外网;
accessKeyId:你的accessKeyId对应的值,一般是做访问权限用的;
accessKeySecret:加密的,不做解释,一般是考虑考虑安全问题;
bucketName:你创建的bucket存储空间的名称;
直接看下代码,这个是我们写的上传文件的工具类,
public class OssFileUtils {
private static String endpoint = "oss-on-beijing.aliyuncs.cn";
private static String accessKeyId = "LTAICMr9msM1kJ";
private static String accessKeySecret = "i1b4a2mtKxsXJl674mhjTEwAKQxk";
private static String bucketName = "test-lbt";
/**
* 功能描述:
*
* @param:[objectKey, multipartFile 文件的新名称]
* @return:java.lang.String
* @date:2018/10/14 15:46
**/
public static String uploadFile(String objectKey, MultipartFile multipartFile)
throws OSSException, ClientException, FileNotFoundException {
// 创建OSSClient的实例
OSSClient ossClient = new OSSClient(endpoint,accessKeyId,accessKeySecret);
StringBuffer sb = new StringBuffer();
// 上传的文件不是空,并且文件的名字不是空字符串
if (multipartFile.getSize() != 0 && !"".equals(multipartFile.getName())) {
ObjectMetadata om = new ObjectMetadata();
om.setContentLength(multipartFile.getSize());
// 设置文件上传到服务器的名称
om.addUserMetadata("filename", objectKey);
try {
ossClient.putObject(bucketName, objectKey, new ByteArrayInputStream(multipartFile.getBytes()), om);
} catch (IOException e) {
}
}
// 设置这个文件地址的有效时间
Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
String url = ossClient.generatePresignedUrl(bucketName, objectKey, expiration).toString();
return url;
}
}
我们再写一个Controller测试一下:
@RestController
@RequestMapping("/oss")
public class OssController {
@PostMapping
public void fileUpload(MultipartFile multipartFile, String fileName) {
try {
OssFileUtils.uploadFile(fileName,multipartFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
最后我们用Postman来测一下,这里我们选择了一个文件,并且把这个文件的名字改为了上传的新文件111.xlsx:
这样就已经上传成功了,我们来看下我们的服务器是不是有这样一个文件:
这就已经完成了文件的上传功能。
其实下载也是很简单的,只需要我们在上传的时候拿到这个文件返回的url地址就可以了。在上面的代码中我已经写了,下面我们再来测一下看看,会不会给我们返回文件的地址。
测试:
很明显我们是可以很容易的拿到文件的地址的,拿到地址那么文件的下载也就轻而易举了。