前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于OSS服务器的文件上传以及文件下载

基于OSS服务器的文件上传以及文件下载

作者头像
一个程序员的成长
发布2020-11-25 15:20:20
7.5K0
发布2020-11-25 15:20:20
举报
文章被收录于专栏:bingfeng-技术

阅读本文大概需要3分钟。

Hello,今天想跟大家分享一下我近期做的项目中使用的文件上传与文件下载,其实在以前我们想要做文件上传可能要自己去搭建一个专门的服务器,然后将我们的文件上传到这个服务器上,下载就从我们这个服务器上去进行下载就行了。

但是现在随着技术的发展,像阿里这样的公司给我们开发了好多一些专门的服务器来干这样的事情,根本不用我们自己再去搭建服务器,这样用起来确实可以省很多的事情,我们要做的只是购买一台云服务器,将配置参数配置配置就可以实现文件的上传与下载。

什么是OSS

那么什么是OSS呢?其实你可以这样理解,它就是阿里推出的一款云服务器,专门用来做文件存储的,这里需要知道OSS它的存储结构是对象存储,什么意思,就是说它是一个key-value的存储结构,它是支持任何非结构化(图片,视频,文件)数据的存储的。

开通一个属于自己的OSS

接下来我就带大家看一下,如何开通一个属于自己并且免费的OSS云服务器,首先我们要注册阿里云(我相信大家还是可以自己能注册的),注册好之后可能需要大家进行实名认证,大家认证一下即可。然后我们点击这个对象存储OSS,就可以进入。

进来之后大家可以看到我圈的这个地方应该是有一个开通的按钮的,因为我已经开通了,所以显示的是管理控制台。申请开通之后可能有一段时间的审核时间,应该不是很长10分钟就可以通过。

开通好了之后,我们就可以进入到我们的OSS管理控制台了,那么我们想要上传文件那么我们就必须先创建一个我们自己的存储空间。点击新建bucket就可以新建我们的存储空间。

在弹出的文本框中填写一下信息,这里大家只把Bucket名称填好就可以了,其他基本不用动。

创建好了之后,我们点击我们刚才创建的bucket名称,就可以看到我们这个存储空间的信息了。

接下来我们就来写一下代码:

代码撸起来

在上传之前我们先介绍OSS里面需要的几个配置参数

endpoint:这个东西其实就是你那台OSS服务器的访问地址,这个地址一般分为好几种,最好理解的就是它可以分为内网和外网,我们在选择时候一般选择外网;

accessKeyId:你的accessKeyId对应的值,一般是做访问权限用的;

accessKeySecret:加密的,不做解释,一般是考虑考虑安全问题;

bucketName:你创建的bucket存储空间的名称;

直接看下代码,这个是我们写的上传文件的工具类,

代码语言:javascript
复制
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测试一下:

代码语言:javascript
复制
@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地址就可以了。在上面的代码中我已经写了,下面我们再来测一下看看,会不会给我们返回文件的地址。

测试:

很明显我们是可以很容易的拿到文件的地址的,拿到地址那么文件的下载也就轻而易举了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个程序员的成长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档