上传多张图片到oss服务器

最近手头接到这样一个需求,做一个类似商城的东西,里边肯定少不了商城管理,于是就需要把图片存到远程数据库,再把图片的路径存到本地表中。

   这个需求刚开始我是没有太多头绪的,我自己尝试着做了一个图片上传到本地磁盘,然后回显路径的小demo,其实本质上图片上传就是一个数据流的写入,里边不过你用不同的框架可能封装的方法不一样。

接着我去查了阿里oss的使用文档,里边说的详细是详细,但是好多东西刚看不是特别理解,很容易误解文档所要表达的意思。于是我就又开始百度,各种论坛查询一些前辈做过的示例。发现有相同的地方,有不同的地方。因为我当时的整合能力不是特别强,所以耽误了很多时间。
其实图片上传到oss服务器上和上传到本地服务器是一样的。阿里oss有一个存储空间,这个必须定义好了,然后图片需要上传到存储空间下的文件夹里,这个文件夹需要自己定义,知道这些东西后,把图片上传上去不是特别困难的,首先我们来看一下阿里的文档是怎样介绍图片上传的。

文档介绍说是上传文件分为文件上传和流式上传。简单上传指的是使用OSS API中的PutObject方法上传单个文件(Object),本文主要介绍通过Java SDK进行简单上传。
简单上传分为流式上传和文件上传。流式上传使用InputStream作为文件的数据源。文件上传使用本地文件作为OSS文件的数据源。因为图片资源是从前台传给后台,后台用MultipartFile接收的,所以我们不需要使用文件上传,就是用简单的流式上传即可。

流式上传分为上传字符串、上传byte数组、上传网络流、上传文件流。
上传字符串:
String content = “Hello world”;
ossClient.putObject("", “”, new ByteArrayInputStream(content.getBytes()));
这里的yourBucketName就是你的存储空间名字,yourObjectName就是你的文件名字,这里包括你的文件路径,也就是你存储空间下的一系列文件名+你的字符串名字。
上传byte数组:
byte[] content = “Hello OSS”.getBytes();
ossClient.putObject("", “”, new ByteArrayInputStream(content));
上传byte数组本质上和上传字符串是一样的,到最后都是转化为ByteArrayInputStream进行上传的。
上传网络流:
InputStream inputStream = new URL(“https://www.aliyun.com/”).openStream();
ossClient.putObject("", “”, inputStream);
参数前边都是一样的,只有最后一个参数换为了输入流InputStream。
上传文件流:
InputStream inputStream = new FileInputStream("");
ossClient.putObject("", “”, inputStream);
后两个方法参数是一样的。
这里我用的是byte数组上传的方法。我自己又进行了一些封装。
我后台收到的是MultipartFile类型的数组,因为可能前台一下穿传过来多张图片,于是我用数组接收,分次调用阿里接口,批量进行添加。首先后台我先获得文件的后缀名,再定义一下图片存储的路径,这个路径就相当于Object。即那个图片,类似于(“aa/bbb/ccc/11.jpg”)。就是把后台收到的数组file.getBytes()一下,
这样上传完成。在获取图片地址的时候也走了一些弯路,因为开始我在上传完图片后,去阿里云后台去看,发现图片的url链接是带有过期时间和一些权限标识的,直接赋值这个url链接确实也能看到,但是这样不是我想要的结果,我想要的路径直接就是末尾是这个图片的地址,其它的不能带上,如果带上的话,当我返回给前台的时候,一些不必要的东西就会暴露出来,并且这样也不对,一旦过了过期时间,图片就显示不出来了呀,这是一个问题,并且这个问题网上也没有人解决。也困扰了我好长时间。
后来在突然的一天,我想到会不是我在创建这个存储空间的时候,就已经设置好了权限,导致再看它底下图片的时候还需要带一些认证标识,于是我就看了看bucket的权限,果然是这方面的原因,把bucket的权限从私有改为公共读就可以了。至此,图片上传和显示图片url就已经完成。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值