记得以前刚开始学习web项目的时候,经常涉及到需要上传图片啥的,那时候都是把图片上传到当前项目文件夹下面,每次项目一重启图片就丢了。虽然可以通过修改/tomcat/conf//artifact/com.aliyun.oss/aliyun-sdk-oss -->
为什么要引入最新的依赖。因为如果遇到什么问题需要找阿里云的人帮忙解决的时候,别人大多数都会问你什么版本的sdk,然后如果遇到那种一时半会比较难解决的问题,人家会推荐你升级最新版本试试。因为可能在最新版本修复了你所遇到的bug。有人可能会说,引入最新版本不就是帮别人踩坑吗?万一解决一个bug又引入两个bug列?这种情况也不是没有可能的。
上图是官网提供的入门例子,代码是一大坨,我们可以看看稍微优化后的代码: 创建一个单例的ossClient
,可以复用线程,不需要每次都去new ossClient()
.
接入起来还是非常简单的,一个后端签名,前端上传前后分离的文件上传就已经完成了。这里我们使用postman
模拟下前端上传,当然这里可以改为前端使用ajax
,或者其他方式都可以。上传的url是由我们自己申请的bucketname
和endpoint
组成的
但是其实这里面也是有许多坑的我们还是需要稍微注意下。
上传和下载都会有带宽的限制,如果我们是采用外网直传到阿里云oss的话,需要注意下我们的外网带宽是否够用,以及应对大文件的上传是不是会把带宽打满。如果带宽被打满我们上传就gg了。同样的下载也有带宽限制的,需要避免大文件的下载,如果遇到这种大文件下载我们可以采用其他的方式,比如使用oss的客户端。所以我们需要合理的考虑我们服务器的带宽。如果我们的应用直接是部署在阿里云上面的话,我们可以采用内网的上传和下载。这样的话就不会有带宽的限制。
当我们使用OSSclient
提供的一些api
使用的时候需要仔细去看看里面是怎么实现的,或者看看它的文档有没有特殊交代的。
比如使用OSSclient
提供的processObject
方法我们最后需要关闭输入流,如果流不关闭,链接不被释放。应用链接马上就会被占满,然后服务就会成为一个假死的状态,这个问题我们在生产环境就遇到一次。如下图所示线程一直没有被释放。
像这种为什么需要我们手动去关闭流,为什么不直接api
帮我们关闭,阿里云的回复是因为这里返回的流可能业务方自己需要复制、或者读什么的。所以需要调用方主动关闭下,在这个很隐秘的文档中我们也有找到这个答案。