七牛云上传照片

时间:2022-08-23 16:29:19

之前公司用的是另一个平台,后来有了七牛云这个便宜方面的照片平台,我们就一直都在用这个了。之前的项目也二次开发,改成了用七牛云存贮照片

我做的一个项目是微信公众号,在微信平台上实现上传照片,照片这个功能真的是经历了很多更改吗,记下来,方便以后开发

七牛云的开发者中心有提供好的官方的sdk和社区的sdk,官方SDK里面javascript的下载文档,源码地址和在线示例都有的,要引入的东西比较多qiniu.js这些,还用了pulpload这个上传文件的插件,依赖一个ID为pickfiles的上传照片的点选按钮,前端的代码如图,

<input id="pickfiles" type="file" accept="image/*" capture="camera" class="pickfiles" >

然后问题就来了,这个标签没有加pickfiles这个id的时候是可以调摄像头的,但是当加上这个id并且引入一系列依赖的js文件后,在安卓手机里的微信浏览器中,就打不开摄像头了,其他浏览器打开页面也还是能打开摄像头的,只能选择文件或照片上传,在苹果手机ios系统中,这个方法一点问题也没有,可以选择拍照或者是访问相册,然后我就进行了个各种尝试,包括在这个js sdk中添加filter这个过滤器功能,限制只能上传照片,

filters:{

prevent_duplicates: true,

mime_types: [
{title : "Image files", extensions : "jpg,jpeg,gif,png"}, // 限定jpg,gif,png后缀上传
]

},

添加这个过滤器后,点击这个按钮,就提示没有应用可以打开了,这个真的只是android在微信浏览器的一个兼容问题,然后我尝试了将前端拍的照片的照片流传给后台,我们后台是jsva写的,用java上传照片也很方便,只是在前端照片流给后台的时候base64这个码太长了,在微信浏览器中会响应时间过长报错,于是在前端上传照片流给后台的时候进行了一下压缩,压缩代码很容易这里就不写了。传给后台也就是照片名字和照片流,也就是一串长长的编码。如下

data:{
                    "imgStr":base64,
                    "imgName":file.name
                },

然后开发环境测试没问题,但是部署上去之后就有问题了,公司的服务器是内网的,测试环境还不能访问外网, 这样,后台就不能上传照片了,于是就用了七牛云的api,不同的分区,有不同的地址,这个要注意,例如华南地区地址为http://up-z2.qiniu.com上传的请求体token file 和key这些很简单自己设置一下,上传成功后会有hash和key两个字段,也可以在上传策略中写回调函数,直接声明一下返回哪些值,照片的时间和url地址,照片名称,照片大小这些都能拿到。