web前端直接上传七牛云服务器探索

之前做图片上传的时候,采用的方案是在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图片的接口了,就是因为图片的引用有问题,他们本来开发了这个功能,发现用不了,于是不让用户提交成功了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章