原生Js图片上传

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原生Js图片上传相关的知识,希望对你有一定的参考价值。

上传图片通常用两种格式:

base64,byte

----------------------------------------------------------------------------------------

byte上传:

  FileReader.readAsArrayBuffer//将file读取为ArrayBuffer

base64上传

  FileReader.readAsDataUrl//将file读取为Url。

----------------------------------------------------------------------------------------

                                      ====Byte上传===

前端

  

<input type="file" onchange="wl(event)" filetype="image/*"/>

Js

function FW(event)
    var input = event.target;
    var reader = new FileReader();
    reader.onload = function(){
        var dataAF = reader.result;
        httpHelper({
            type:‘post‘,
            async:‘true‘,
            data:dataAF,
            success:function(){
                //上传成功
            },
            error:function(){
                //上传失败
            }
        });
    };
    reader.readAsDataBuffer(input.files[0]);
};
function httpHelper(params) {
    var request;
    if(XMLHttpRequest)
        request=new XMLHttpRequest();
    else
        request=new ActiveXObject("Microsoft.XMLHTTP");
    request.onreadystatechange = function () {
        if (request.readyState == 4) {
            if (request.status == 200) {
                if (params.success)
                    params.success(request.responseText);
            }
            else if (parseInt(request.status / 100) == 4) {
                if (params.error)
                    params.error(request.responseText);
            }
        }
    }
    request.open(params.type, params.url, params.async);
    try {
        request.send(params.data||null);
    } catch (e) {
        if (params.error)
            params.error(request.responseText);
    }
}

后台直接从request的stream读取,储存为图片就好了,图片格式可以放到请求头里。

----------------------------------------------------------------------

                          ======base64=======

又时读取文件是图片,读取之后提供要浏览。这时需要把file读取为Url,把Url上传到服务器后需要对Url进行分解才能得到自己想要的图片base64数据。

如果用get请求上传图片时,有些base64特殊字符会被转义(=,+,-),此时需要在服务端还原。然后把base64解码为byte数组,然后创建为图片。

  

以上是关于原生Js图片上传的主要内容,如果未能解决你的问题,请参考以下文章

纯原生js移动端图片压缩上传插件

原生 js 上传图片

玩转图片上传————原生js XMLHttpRequest 结合FormData对象实现的图片上传

原生JS实现异步图片上传(预览)

原生JS,前端压缩图片方案

js文件图片上传(原生方法和jquery的ajax两种都有)