js七牛上传图片文件类型变成 application/octet-stream

使用js上传文件的时候一不小心踩到了这个坑,我这边排查了一下遇到这个问题原因是异步加载前后顺序的问题,内心崩溃

function fn_uploadpic(){   
//七牛token 七牛云平台安全标识
var qiniutoken = '';
//七牛云图片base64格式上传地址
var uploadUrl = "http://upload.qiniup.com/putb64/-1";
//需要上传的图片内容 base64格式
var imgStr = '';
//七牛云平台 配置的域名
var urlHeader = "http://**************/";
//64位文件上传
var reader = new FileReader();
//filses就是input[type=file]文件列表,files[0]就是第一个文件,这里就是将选择的第一个图片文件转化为base64的码
reader.readAsDataURL(document.getElementById("imgFile1").files[0]);
reader.onload = function (e) {
    //或者 e.target.result都是一样的,都是base64码
    imgStr = reader.result.split(',')[1];
    if (imgStr!=""){
        qnToken(imgStr);
    }
}
function qnToken(imgStr) {
    //todo 获取token
    $.ajax({
        url: '/api/qiniu/getTokens',
        type: 'get',
        dataType: 'json',
        //平台登录token 不重启30天过期
        headers: {
            'token': 'eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NDgyMjk4NDcsImlzcyI6IkNhclNoaUxpYnJhcnkiLCJzdWIiOiJbMTA5MCxcIjE3NjA4NDg1MjAzXCJdIn0.AcZUEEqhEHpj2GMzS0JQLsvnG65MoLGadiRDNaN_WAw'
        },
        async: false,
        success: function (data) {
            qiniutoken = data.data.upToken;
            uploadImg(imgStr,qiniutoken);
        },
        error: function (e) {
            alert(JSON.stringify(e));
        }
    })

}
//上传图片
function uploadImg(imgStr,qiniutoken) {
    //todo
    var xhr = new XMLHttpRequest();
    xhr.open("POST", uploadUrl, true);
    //文本类型
    xhr.setRequestHeader("Content-Type", "application/octet-stream");
    //七牛认证信息 注意空格
    xhr.setRequestHeader("Authorization", "UpToken " + qiniutoken);
    xhr.send(imgStr);
    //监听状态
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
            var result = xhr.responseText;
            console.log('上传请求结果数据:' + result);
            result = JSON.parse(result);
            console.log('上传请求结果数据:' + urlHeader + result.key);
//图片路径展示出来了,result.key 就是生成token接口的key,就是文件命名,我这个是在token里面写死了呢,可以改成获取token 的时候前端传入,
            var urllist = urlHeader + result.key;
//下面就是图片展示到页面上去我自己的逻辑了
            var vtype = $("#imgFile" + colid).attr("data-type");
            var imglist = fn_show_img(urllist, vtype, filetype);
            $("#uploaded-img1").append(imglist);
            $("#uploaded-img1").show();
            $("#upload-img1").html("");
            $("#upload-img1").hide();
        }
    }

}
}

下面贴上前端传入key的后端代码

js七牛上传图片文件类型变成 application/octet-stream_第1张图片

 

你可能感兴趣的:(javascript)