web前端直接上传七牛云服务器探索
2016-01-08 10:01
281 查看
之前做图片上传的时候,采用的方案是在js前端压缩成一大一小两张base64图片,然后上传到我们的服务器上,转换成为jpeg格式后上传到七牛图片服务器上。之所以一开始没有采用七牛提供的js直接上传到七牛服务器,主要是考虑图片的安全,后来研究了一下,发现七牛是有自己的安全机制的。采用token对每一张图片上传授权。从减小服务器流量的角度考虑,预研了一次七牛js上传七牛服务器。
首先研究的是七牛提供的js上传api,首先否定了这个方案,理由如下。1.他提供的的库太大了,需要引用的两个库加起来100多K,对于移动应用太大了。2.它是关联input-file后响应上传,上传的也是选择的文件,不会上传我们的压缩文件。
紧接着研究了一下nodejs方式的上传,考虑前端引用node服务端的代码,发现引用不了,放弃。
研究了一下七牛文档,发现上传文件就是提交一个form表单。于是研究如何用js异步提交表单,首先想到的是jquery.form.js。虽然可以异步提交表单,但是如何提交文件是个问题。后来发现七牛提供了base64图片上传的接口,测试了一下,发现上传不了,放弃。后来尝试了FormData,发现采用这个方案文件可以正常提交到七牛服务器上,上传代码如下。
function putb64(key, token, file){
var oMyForm = new FormData();
oMyForm.append("key", key);
oMyForm.append("token", token);
oMyForm.append("file", file);
var oReq = new XMLHttpRequest();
oReq.open("POST", "http://upload.qiniu.com");
oReq.onload = function(oEvent) {
if (oReq.status == 200) {
alert(oReq.responseText);
} else {
alert(oReq.status);
}
};
oReq.send(oMyForm);
}
接下来测试前端引用上传的图片,发现图片直接引用是没有效果的,非得我ajax加载图片内容后将img的src替换才可以生效。但是这就有个图片缓存的问题了,毕竟动态加载的内容是没有办法做图片缓存的。用户每次打开网页,都得将所有图片动态加载一次,这个很难接受,毕竟读新闻是大多数情况,写新闻上传图片是少数行为,于是放弃了用js直接上传七牛服务器,还是采用原来的方式。
过后想明白了七牛为什么不提供一个正常的上传base64图片的接口了,就是因为图片的引用有问题,他们本来开发了这个功能,发现用不了,于是不让用户提交成功了
首先研究的是七牛提供的js上传api,首先否定了这个方案,理由如下。1.他提供的的库太大了,需要引用的两个库加起来100多K,对于移动应用太大了。2.它是关联input-file后响应上传,上传的也是选择的文件,不会上传我们的压缩文件。
紧接着研究了一下nodejs方式的上传,考虑前端引用node服务端的代码,发现引用不了,放弃。
研究了一下七牛文档,发现上传文件就是提交一个form表单。于是研究如何用js异步提交表单,首先想到的是jquery.form.js。虽然可以异步提交表单,但是如何提交文件是个问题。后来发现七牛提供了base64图片上传的接口,测试了一下,发现上传不了,放弃。后来尝试了FormData,发现采用这个方案文件可以正常提交到七牛服务器上,上传代码如下。
function putb64(key, token, file){
var oMyForm = new FormData();
oMyForm.append("key", key);
oMyForm.append("token", token);
oMyForm.append("file", file);
var oReq = new XMLHttpRequest();
oReq.open("POST", "http://upload.qiniu.com");
oReq.onload = function(oEvent) {
if (oReq.status == 200) {
alert(oReq.responseText);
} else {
alert(oReq.status);
}
};
oReq.send(oMyForm);
}
接下来测试前端引用上传的图片,发现图片直接引用是没有效果的,非得我ajax加载图片内容后将img的src替换才可以生效。但是这就有个图片缓存的问题了,毕竟动态加载的内容是没有办法做图片缓存的。用户每次打开网页,都得将所有图片动态加载一次,这个很难接受,毕竟读新闻是大多数情况,写新闻上传图片是少数行为,于是放弃了用js直接上传七牛服务器,还是采用原来的方式。
过后想明白了七牛为什么不提供一个正常的上传base64图片的接口了,就是因为图片的引用有问题,他们本来开发了这个功能,发现用不了,于是不让用户提交成功了
相关文章推荐
- easyui------显示隐藏列功能
- 按右键另存图片只能存BMP
- photoshop去除图片上的水印
- upload上传单张图片
- 图片引发的溢出危机(图)
- C#实现把彩色图片灰度化代码分享
- C#将图片和字节流互相转换并显示到页面上
- C#监控文件夹并自动给图片文件打水印的方法
- 纯CSS实现的当鼠标移上图片添加阴影效果代码
- C#实现打开画图的同时载入图片、最大化显示画图窗体的方法
- 随鼠标移动的图片或文字特效代码
- CSS 图片横向排列实现代码
- C#实现将Email地址转成图片显示的方法
- 超级经典一套鼠标控制左右滚动图片带自动翻滚
- 用css实现图片垂直居中的使用技巧
- C++实现读取图片长度和宽度
- VC中BASE64编码和解码使用详解
- PHP根据图片色界在不同位置加水印的方法
- php通过修改header强制图片下载的方法