美文网首页
文件上传问题

文件上传问题

作者: 黄鹤你不是人 | 来源:发表于2017-12-06 17:12 被阅读0次

    1.文件如何上传

    a.把图片转化为base64位上传到服务器(使用getBase64Image()方法把图片转化为base64位格式)
    b.使用input标签进行上传(那么如何上传呢,客官请继续往下看)

    2.怎么写

     <input id="images" name="file" type="file" multiple accept="image/gif,image/jpeg,image/jpg,image/png" />
    

    看完代码之后会问,multiple 与accept属性是干嘛的呢,其实accept属性是规定上传数据类型的,上传数据类型/数据格式,multiple 是规定用户是否可以选择多个文件进行上传.
    知道了上传文件的标签了,那到底应该怎么传呢?看官别急,且听我细细道来

    3.怎么传

    第一步:获取input的files属性
    第二步:创建FormData对象,吧file添加到FormData对象中
    第三步:通过ajax上传FormData对象

    4.拓展

    正常的开发需求,我们一般要对文件的大小进行限制,显示图片的名字,上传图片要加一些预览等功能,此时我们就要知道File对象与FileReader了
    a.File对象
    File对象提供了name,type,size方法包括了上传文件的名字,类型与大小
    b.FileReader读取文件内容
    具体方法如下

    var file = document.getElementById('file').files[0];//获取file对象
                if (file) {
                    var reader = new FileReader();//创建FileReader对象
                    reader.onload = function (event) {
                        var txt = event.target.result;//上传图片的url
                        var img = document.createElement("img");
                        img.src = txt;
                        document.getElementById("result").appendChild(img);
                    };
                }
                reader.readAsDataURL(file);//将读取到的文件编码成Data URL
    

    5.遇到的坑

    当我们把accpet设置为accpet="image/"时,Chrome总会出现卡段问题,当我把accpet="image/改为accpet="image/jpg时,就不会有卡顿问题啦,通过百度发现,是谷歌的SafeBrowsing对文件进行了检查.具体原因就是,当我们对SafeBrowsing白名单之外的文件格式进行上传时,SafeBrowsing会对文件进行检查,此时就出现上传任务被挂起(js单线程嘛,不理解的可以看看js的事件循环),此过程会持续到SafeBrowsing任务结束或者超时,此时文件进行上传.
    解决办法:升级浏览器或者对文件类型进行细化.

    相关文章

      网友评论

          本文标题:文件上传问题

          本文链接:https://www.haomeiwen.com/subject/kzclixtx.html