ASPNET AJAX上传文件-非form提交的坑之一

ASPNET AJAX上传文件-非form提交的坑之一

在网上找来一些大佬的例子参考,一通修改后,逻辑基本通过,但是提交时,发现FileUpload的控件值一直获取不到,wk,郁闷

 var file1 = document.getElementById("file1");
var data=file1.files[0];
 
            //1.创建异步对象(小浏览器)  
            var req = new XMLHttpRequest();
            //2.设置参数           
            req.open("post", "Uploadfile/uploadNoneFrmSubmit.ashx", true);
            //3.设置 请求 报文体 的 编码格式(设置为 表单默认编码格式)   
            req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            // req.setRequestHeader("")          

file1.files[0]无论如何也获取不到值,郁闷,从html控件改成服务器控件,各种验证测试,都不通过,仍然是空值。

后来仔细排查,查资料,发现,mygod ,基础概念问题,ajax和dom定义的很清楚,如一位老兄整理的资料:

$(‘xx’)[0].files[0]是什么意思,

①首先得明白jQuery对象只能使用jQuery对象的属性和方法,JavaScript对象只能使用JavaScript对象的属性和方法;
②files[0]是JavaScript的属性;
( ′ x x ′ ) 是 j Q u e r y 对 象 , ('xx')是jQuery对象, (xx)jQuery(‘xx’)[0]是将jQuery对象: ( ′ x x ′ ) 转 换 为 J a v a S c r i p t 对 象 , 这 样 才 可 以 使 用 J a v a S c r i p t 对 象 的 属 性 和 方 法 ; ④ 我 们 再 看 这 行 代 码 的 背 景 , H T M L 5 支 持 m u l t i p l e 属 性 , 即 < i n p u t t y p e = " f i l e " > 可 能 会 添 加 m u l t i p l e 属 性 并 赋 值 : m u l t i p l e = " m u l t i p l e " , 即 < i n p u t t y p e = " f i l e " m u l t i p l e = " m u l t i p l e " > , 这 样 一 次 性 可 同 时 上 传 多 张 图 片 , 所 以 获 得 一 张 图 片 的 方 法 就 是 : ('xx')转换为JavaScript对象,这样才可以使用JavaScript对象的属性和方法; ④我们再看这行代码的背景,HTML5支持multiple属性,即<input type="file">可能会添加multiple属性并赋值:multiple="multiple",即<input type="file" multiple="multiple">,这样一次性可同时上传多张图片,所以获得一张图片的方法就是: (xx)JavaScript使JavaScriptHTML5multiple<inputtype="file">multiplemultiple="multiple"<inputtype="file"multiple="multiple">(‘xx’)[0].files[0]
⑤扩展:
( ′ x x ′ ) [ 0 ] . f i l e s [ 0 ] . s i z e 可 获 得 文 件 的 大 小 , 单 位 是 字 节 ( B ) , 使 用 ('xx')[0].files[0].size可获得文件的大小,单位是字节(B),使用 (xx)[0].files[0].sizeB使(‘xx’)[0].files[0].size可用于判断文件的大小。
最后:第②点可能描述不准,若发现错误欢迎指正,大家共同进步。

还有补充的:

$(‘xx’)[0].files[0]的意思

Query对象只能使用jQuery对象的属性和方法,JavaScript对象只能使用JavaScript对象的属性和方法;

( ′ x x ′ ) 是 j Q u e r y 对 象 , ('xx')是jQuery对象, (xx)jQuery(‘xx’)[0]是将jQuery对象:"$(‘xx’)"转换为JavaScript对象,这样才可以使用JavaScript对象的属性和方法;

HTML5支持multiple属性,即可能会添加multiple属性并赋值:multiple=“multiple”,即,这样一次性可同时上传多张图片,所以获得一张图片的方法就是:$(‘xx’)[0].files[0]

( ′ x x ′ ) [ 0 ] . f i l e s [ 0 ] . s i z e 可 获 得 文 件 的 大 小 , 单 位 是 字 节 ( B ) , 使 用 ('xx')[0].files[0].size可获得文件的大小,单位是字节(B),使用 (xx)[0].files[0].sizeB使(‘xx’)[0].files[0].size可用于判断文件的大小。

多文件上传时,获取每一个文件的大小:

var addImags =$(input的id).prop('files');
var fileSize=0;
for(var i=0;i<addImags.length;i++){
fileSize=$(addImags)[i].size; 
if(fileSize>1048576){
layer.msg("文件过大");
return;
}
}

限制多文件一次上传个数:

var fileList = $(input的id).get(0).files;

if(fileList.length>10){
  alert("一次最多上传10个文件!");

  return;

}

IE兼容问题:

<

script type="text/javascript">   
    // 判断是否为IE浏览器: /msie/i.test(navigator.userAgent) 为一个简单正则
    var isIE = /msie/i.test(navigator.userAgent) && !window.opera;
    function fileChange(target){
        var fileSize = 0;
        if (isIE && !target.files) {    // IE浏览器
            var filePath = target.value; // 获得上传文件的绝对路径
            /**
             * ActiveXObject 对象为IE和Opera所兼容的JS对象
             * 用法:
             *         var newObj = new ActiveXObject( servername.typename[, location])
             *         其中newObj是必选项。返回 ActiveXObject对象 的变量名。
             *        servername是必选项。提供该对象的应用程序的名称。
             *        typename是必选项。要创建的对象的类型或类。
             *        location是可选项。创建该对象的网络服务器的名称。
             *\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
             *     Scripting.FileSystemObject 为 IIS 内置组件,用于操作磁盘、文件夹或文本文件,
             *    其中返回的 newObj 方法和属性非常的多
             *    如:var file = newObj.CreateTextFile("C:\test.txt", true) 第二个参表示目标文件存在时是否覆盖
             *    file.Write("写入内容");    file.Close();
             */
            var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
            // GetFile(path) 方法从磁盘获取一个文件并返回。
            var file = fileSystem.GetFile(filePath);
            fileSize = file.Size;    // 文件大小,单位:b
        }
        else {    // 非IE浏览器
            fileSize = target.files[0].size;
        }
        var size = fileSize / 1024 / 1024;
        if (size > 1) {
            alert("附件不能大于1M");
        }
    }
</script>

转载于:https://www.cnblogs.com/yizw/p/7645132.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值