H5前端上传文件的几个解决方案

目前,几个项目中用到了不同的方法,总结一下分享出来。

第一种,通过FormData来实现。

var input = document.getElementById("uploadFile");

    var getOnloadFunc = function (aImg) {
        return function (evt) {
            aImg.src = evt.target.result;
        };
    }
    input.addEventListener("change", function (evt) {
        for (var i = 0, numFiles = this.files.length; i < numFiles; i++) {
            var file = this.files[i];

            var img = document.createElement("img");
            $(".tp").append(img);

            var reader = new FileReader();
            reader.onload = getOnloadFunc(img);
            reader.readAsDataURL(file);

            alert(file.name);

            var fd = new FormData();
            // 直接传递file对象到后台       fd.append("image", file);
            fd.append("guanId", $("input[name=commonGuanId]").val());

            $.ajax({
                url : ‘/tools/submit_ajax.ashx?action=sign_upload‘,
                type : ‘POST‘,
                data : fd,
                processData: false,
                contentType: false,
                timeout : 10000,
                success : function(data) {
                    var mydata = JSON.parse(data);

                    if (mydata.status == 1) {
                        alert("上传成功");
                    } else {
                        alert("失败,请稍后重试!");

                    }
                },
                error : function(xhr,textStatus){
                    //alert(‘上传失败,请稍后重试‘);

                }
            });
        }
    }, false);

第二个,微信JSSDK接口,这个用起来比较方便,但是必须在微信的环境中应用,有局限性。

 1  wx.config({
 2         debug: false,
 3         appId: ‘<% = config.appId%>‘,
 4         timestamp: ‘<% = config.timestamp%>‘,
 5         nonceStr: ‘<% = config.nonceStr%>‘,
 6         signature: ‘<% = config.signature%>‘,
 7         jsApiList: [‘chooseImage‘,
 8             ‘previewImage‘,
 9             ‘uploadImage‘,
10             ‘downloadImage‘
11         ]
12     });
13
14
15     var serverIds = ""
16     function uploadImg() {
17         if(serverIds!="")
18         {
19             serverIds="";
20         }
21         wx.chooseImage({
22             count: 1,
23             sizeType: [‘original‘, ‘compressed‘], // 可以指定是原图还是压缩图,默认二者都有
24             sourceType: [‘album‘, ‘camera‘],      // 可以指定来源是相册还是相机,默认二者都有
25             success: function (res) {
26                 var localIds = res.localIds;      // 返回选定照片的本地ID列表
27                 syncUpload(localIds);             // localId可作为img标签的src属性显示图片
28             }
29         });
30     }
31
32     function syncUpload(localIds) {
33         var localId = localIds.pop();
34         wx.uploadImage({
35             localId: localId,                // 需要上传的图片的本地ID,由chooseImage接口获得
36             isShowProgressTips: 1,           // 默认为1,显示进度提示
37             success: function (res) {
38                 var serverId = res.serverId; // 返回图片的服务器端serverId
39                 serverIds = serverIds + serverId + ",";
40
41                 if (localIds.length > 0) {
42                     syncUpload(localIds);
43                 } else {
44                     $.ajax({
45                         type: "POST",
46                         url: "/tools/submit_ajax.ashx?action=img_upload",
47                         dataType: "json",
48                         data: {
49                             "serverIds":serverIds
50                         },
51                         timeout: 20000,
52                         success: function (data, textStatus) {
53                             if(data.status==1){
54                                 $("#picname").attr("src", data.msg);
55                                 $("#hidImgUrl").attr("value",data.msg);
56                             }else{
57                                 alert(data.msg);
58                             }
59                         },
60                         error:function(data){
61                             alert("系统错误,请刷新页面重试!");
62                         }
63                     });
64                 }
65             }
66         });
67     };
时间: 2024-08-01 14:13:47

H5前端上传文件的几个解决方案的相关文章

前端上传文件的方法总结

最近做了阿里云的oss上传,顺便来总结下上传文件的几种主要方法. 第一种:经典的form和input上传. 设置form的aciton为后端页面,enctype="multipart/form-data",type='post' <form action='uploadFile.php' enctype="multipart/form-data" type='post'> <input type='file'> <input type=

web前端上传文件按钮自定义样式

思路: 按钮进行隐藏,样式自己该怎么写怎么写,之后通过js监测input改变上传文件. 前端写法: // jquery + bootstrap写法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>上传文件获取URL</title> <link rel="stylesheet" h

HipChat上传文件报未知错误解决方案

前言 HipChat是Atlassian公司的一款团队协作即时通讯工具,服务端为Linux(官方给的服务端就是一个虚拟机),在Windows.Linux.Android.IOS.Mac等平台都有客户端软件,还可以直接在PC的Web上直接聊天,对于团队协作交流需求整理的比较到位,最主要的是HipChat可以和Confluence对接讨论主题(不是有Confluence的需求个人觉得不如其他一些团队通讯软件). 前些天接下了配置HipChat服务端的任务,但是使用了几天后发现,聊天时发送超过10M的

Fastdfs 无法上传文件问题描述及解决方案

今开发反馈一问题,发现fastdfs中有两个组无法上传文件,简单测试了下: fdfs_upload_file /etc/fdfs/storage.conf /root/1.jpg 会返回给我N00~N02,N04,N06~N10但缺少了N03,N05 通过fdfs_monitor和监控(23000端口)都是没问题的,于是专门对比了N02和N03,N05的区别之处: 发现N02的磁盘: /dev/sdc1             3.6T  884G  2.6T  26% /data/M00 /d

前端上传文件的几种方式

出于安全考量,操作系统分配给浏览器的权限较低,而单个网页所拥有对用户电脑操作的权限就更低了,这是为了防止因用户的操作不当导致恶意网页随意增删改动用户本地的文件,所以在前端网页中所有的文件操作必须全都由用户来主动操作触发文件上传. 用户触发文件上传操作的类型大致有以下几种常用方法 使用input标签,通过一个type设置为file的输入框可以选中本地文件 通过html5的拖拽方法进行文件上传 通过在编辑框进行文件复制 下面我们就对这几种不同的上传方法进行一个详细的分析,分析不同方法的一个特效和优劣

优秀的前端上传文件插件 web uploader

WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+.两套运行时,同样的调用方式,可供用户任意选用. 采用大文件分片并发上传,极大的提高了文件上传效率. 具体的使用方法和插件请参考 web uploader 之官网: http://fex-team.github.io/

发布IIS后 上传文件过大失败解决方案

下面上图不多BB IIS上找到这玩意 然后左上角的节里面输入:system.webServer/security/requestFiltering 然后如下图: 这里是限定了30000000子节点  也就是28M 我们把它改成2GB IIS的上限2072576000 然后保存就OK啦

uploadifive上传文件

uploadifive是一个款基于H5的上传文件的插件.优点是,可以在PC端,也可以在手机上进行操作.缺点是,IE9以下的兼容性不好. View: 1 <!DOCTYPE html> 2 3 <html> 4 <head> 5 <meta name="viewport" content="width=device-width" /> 6 <title>Index</title> 7 <sc

ueditor1.3.6jsp版在struts2应用中上传图片报&quot;未找到上传文件&quot;解决方案

摘要: ueditor1.3.6jsp版在struts2应用中上传图片报"未找到上传文件"解决方案 在struts2应用中使用ueditor富文本编辑器上传图片或者附件时,即使配置好了上传路径信息,也会出现"未找到上传文件"的错误提示,出先该问题的原因是:在配置struts过滤器,过滤路径设置/*方式时,由于struts2框架默认使用apache的Commons FileUpload组件和内建的FileUploadInterceptor拦截器实现上传,会将reque