• 解决new file()在IOS下不兼容问题


    先看一下file的浏览器兼容问题

     解决方法

    将base64转成Blob再上传

    dataURLtoFile(dataurl, filename) {
        //转成blob
        function dataURLtoBlob(toDataURL) {
            var arr = toDataURL.split(","),
                mime = arr[0].match(/:(.*?);/)[1],
                bstr = atob(arr[1]),
                n = bstr.length,
                u8arr = new Uint8Array(n);
            while (n--) {
                u8arr[n] = bstr.charCodeAt(n);
            }
    
            var blob = null;
    
            // 解决低版本浏览器没有new Blob()问题
            try {
                blob = new Blob([u8arr], { type: mime });
            } catch (e) {
                var BlobBuilder = window.BlobBuilder = (
                    window.BlobBuilder ||
                    window.WebKitBlobBuilder ||
                    window.MozBlobBuilder ||
                    window.MSBlobBuilder
                );
    
                if (e.name === "TypeError" && BlobBuilder) {
                    var builder = new BlobBuilder();
                    builder.append(u8arr);
                    blob = builder.getBlob(mime);
                }
            }
    
            return blob;
        } 
    
        //转成file
        function blobToFile(Blob, fileName) {
            Blob.lastModifiedDate = new Date();
            Blob.name = fileName;
            return Blob;
        }
    
        // 调用如下
        let bold = dataURLtoBlob(dataurl);
        let file = blobToFile(bold, "fileName");
        
        // 上传file就可以了
        return file;
    }
    // ...
    // 案例是截取视频第一帧图片
    // file是视频文件
    var imgFile = that.dataURLtoFile(
        canvas.toDataURL("image/png"),
        file.name.split(".")[0] + ".png"
    );
    var fd = new FormData();
    // 这里的第三个参数传一个带后缀名的文件名,避免认为不是有效的图片文件
    fd.append("file",imgFile,file.name.split(".")[0] + ".png");
    $.ajax({
            type: "post",
            url: '上传路径',
            data: fd,
            contentType: false,
            processData: false  //这两个属性不能省
        })
        .then(res => {
            console.log('上传成功');
        })
  • 相关阅读:
    编程心得2----有疑惑,用代码说话
    Java的static关键字
    html中设置textbox的宽和高
    C#(winform)设置窗体的启动位置
    C#(winform)设置窗口置顶
    C#(winform)实现不同DPI控件自适应1
    设计模式--策略模式(strategy)
    requirejs原理深究以及r.js和gulp的打包【转】
    JavaScript中清空数组的三种方式
    localstorage本地存储
  • 原文地址:https://www.cnblogs.com/223zzm/p/11782667.html
Copyright © 2020-2023  润新知