专栏首页bingfeng-技术基于OSS服务器的文件上传以及文件下载

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

阅读本文大概需要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地址就可以了。在上面的代码中我已经写了,下面我们再来测一下看看,会不会给我们返回文件的地址。

测试:

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

本文分享自微信公众号 - 一个程序员的成长(xiaozaibuluo),作者:一个程序员的成长

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 最最最常见的Java面试题总结推送给你们

    首先要明确的是:“对象传递(数组、类、接口)是引用传递,原始类型数据(整型、浮点型、字符型、布尔型)传递是值传递。”

    一个程序员的成长
  • 字符串、集合如何判断空值?看看成年人的正确操作

    在平时的开发中,基本上都会用到字符串判断空值和集合判断空值的处理,还记得在刚干开发的时候,写的代码在现在看起来是真的有点Hello World,那么这次分享两个...

    一个程序员的成长
  • 后端对前台传递的日期类型处理的两种方式

    大家平时可能接触到前台传到后台的日期类型,那么大家是如何处理的呢?我先说说我之前是怎么处理的吧!

    一个程序员的成长
  • Java StringBuffer和StringBuilder类

    当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类。 和String类不同的是,StringBuffer和StringBu...

    郭耀华
  • java开发操作系统:同时运行多窗口多任务

    望月从良
  • Web-第十五天 Ajax学习【悟空教程】

    在实际开发中,完成注册功能前,如果用户填写用户信息,准备填写其他信息时,将提示当前用户的用户名是否可用。效果图如下:

    Java帮帮
  • [UI自动化设计模式]超越PO:使用Serenity和ScreenplayPattern新一代自动化测试

    在如今快节奏的软件交付环境下,自动化验收测试是很有必要的。高质量的自动化验收测试能够减少手动测试和bug修复所耗费的时间,从而帮助我们更快地交付有价值的特...

    测试邦
  • [C#源代码]使用SCPI指令对通信端口(RS232/USB/GPIB/LAN)进行仪器编程

     本文为原创文章、源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称、作者及网址,谢谢! 本软件是基于NI-VISA/VISA32(Virtu...

    CNXY
  • 记一次系统密码安全事故以及修改方案

    运营人员反馈在晚上十一点多收到系统后台登录的短信验证码,第二天在后台的操作日志中发现自已的账号有被登录过后台系统,但实际上自已并没有登录操作,怀疑账号被他人恶意...

    会跳舞的机器人
  • ES feature and support

    ES 新特性、浏览器、Node.js 都在不断发展,我们怎么去知道有哪些新特性以及它们的兼容性情况呢?

    凌虚

扫码关注云+社区

领取腾讯云代金券