ASP.NET 使用ajaxfileupload.js插件出现上传较大文件失败的解决方法(ajaxfileupload.js第一弹)
在写这篇的时候本来想把标题直接写成报错的提示,如下:
“SecurityError:Blocked a frame with origin "http://localhost:55080" from accessing a cross-origin frame.”
但是有点长,会显示不全,就想还是换一下吧,想了一下
“ASP.NET 上传过大图片或文件报错解决办法”,
然后当我写完这个题目之后,我觉得这篇文章好像根本没有写的必要,估计看完题目就会想到关于web.config配置的方面了。但是想写的内容真的不是那么“单纯”的,毕竟是花了自己几个小时去研究的啊~~所以又想了一下,变成了现在的这个题目,就是想和大家分享一下。
那言归正传了。
先上一下报错的提示截图:
先提示
后提示
是这样的,在网上下载了一个ajaxfileupload.js插件,用于无刷新上传图片使的,然后就按照demo的例子去运行了一下,上传啊什么的都OK,但是正好上传的示例图片有一个比较大的,4M,5M的样子,然后上传就会报上面的错误。
单纯看我的描述,明显发现就是图片较大的原因,可能很快就会想到web.config的配置问题上,但是当我是当局者的时候,就没有那么灵光了,因为有提示错误,就有去百度一下,结果查到是什么“跨域调函数”的问题,至此,这个问题我探究的方向已经走偏。
虽然问题提示当中没有明显的说出是跟上传图片的大小有关系,但是这个问题确实是因为没有设置上传文件的大小,而asp.net的默认上传文件大小是2M
我先把解决方法告诉大家,就是在Web.config的<system.web>中加上下面这段
<httpRuntime maxRequestLength="4096"
useFullyQualifiedRedirectUrl="true"
executionTimeout="6000"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
enableVersionHeader="true" />
说明:
华丽的分割线
华丽的分割线
如果大家想了解我对整个问题的探究过程,那就继续往下看,蛮有意思的(其实也因为探究问题最初的跑偏,让我学习到了相关的更多知识,过程比较恶心,但是结果比较开心。)
话说查那个报错提示,就是“SecurityError:Blocked a frame with origin "http://localhost:55080" from accessing a cross-origin frame.”这句,然后提到了什么“跨域调函数”,当时就迷糊了,这是什么东西啊?然后看到一篇文章是讲关于这个的,主要说就是页面中存在一个iframe,然后iframe中的js代码与页面中的js代码相互调用,在某种情况下就变成了跨域的调用,就会报错。
查到这里我就已经有点不耐烦了,因为貌似需要去查看ajaxfileupload.js插件的源代码了,说实话,看js源码是我众多不爱做的事情之一。但是我又是不喜欢遇到问题草草了事的人,所以必须要看一下了。
最初其实我比较纳闷的是js如何实现将文件上传的?当然,我知道是ajax,但是导向页面的时候,后台是怎么得到的想要上传文件路径的呢?(前台是死都不会让你得到的,只会是类似c:\fakepath\XXX.jpg)原谅我的无知,其实一直在用ASP.NET的自带控件,从来也就没有把这些问题当回事(只是最近好像才灵光一些,听一些朋友说现在开发都不会用ASP.NET的自带控件了,所以最近才开始改变),但是当需要用<input type=file />的时候,才知道自己真的是一无所知。好杯具啊~
说一下js是怎样通过ajax实现上传文件的吧,简单说就是通过提交表单,把包含有<input type=file />的form提交就OK了,然后在后台通过
HttpFileCollection files = System.Web.HttpContext.Current.Request.Files
就能得到这个文件对象,然后就可以进行一系列的操作了。不过通常都是先把文件保存到一个我们指定的目录下,如果你想预览图片,那么就只能调出拷贝到指定目录下的图片去显示。不知道我说的清楚否?
下面说说 ajaxfileupload.js插件是怎么实现文件上传的吧,它是动态的去创建一个iframe和一个form,然后clone(克隆)页面中的<input type=file />到这个form中,之后提交这个动态创建的form,这样后台就能知道你想上传的文件是什么了,返回的内容显示到动态iframe中,更重要的是这是一个无刷新的上传啊!感觉这个想法简直酷毙了。
回到问题,在这个过程中我发现完全没有所谓的“跨域调函数”的问题,后来跟着浏览器打断点。发现选择较大文件上传的时候,动态iframe的文档结构根本就没有生成出来,接着就被catch住了。
因为整个js的代码看的还算仔细,感觉也没什么尿点。就是因为上传文件的大小不同会导致iframe的文档结构能否生成,所以这时候我才有点反过劲儿来,是不是项目配置的问题啊?然后就找到了上面的解决办法。
兜了一个大圈子终于把问题解决,但是关于ajaxfileupload.js插件的事儿还没有完,如有兴趣,请关注:
jQuery 关于ajaxfileupload.js插件的逐步解析(ajaxfileupload.js第二弹)
jQuery 自制上传头像插件-附带Demo实例(ajaxfileupload.js第三弹)
补充:
《jQuery 关于IE9上传文件无法进入后台问题的原因及解决办法(ajaxfileupload.js第四弹)》
ASP.NET 使用ajaxfileupload.js插件出现上传较大文件失败的解决方法(ajaxfileupload.js第一弹)的更多相关文章
- ASP.NET 使用ajaxupload.js插件出现上传较大文件失败的解决方法
在网上下载了一个ajaxupload.js插件,用于无刷新上传图片使的,然后就按照demo的例子去运行了一下,上传啊什么的都OK,但是正好上传的示例图片有一个比较大的,4M,5M的样子,然后上传就会报 ...
- 使用Xshell的rz命令上传文件失败的解决方法
使用Xshell的rz命令上传文件失败的解决方法 第一种:在home目录下rz上传文件失败,如下: 原因:当前用户不具备权限解决:用 sudo rz 上传即可成功 第二种:对于文件大的rz上传失败的话 ...
- asp.net 文件上传,大文件上传。
新建一个asp.net页面,在工具栏里拖入 FileUpload 上传控件.一个按钮 Button ! ! ! 进入Button事件 //----------------------- ...
- 动态input file多文件上传到后台没反应的解决方法!!!
其实我也不太清除具体是什么原因,但是后面就可以了!!! 我用的是springMVC 自带的文件上传 1.首先肯定是要有springMVC上传文件的相关配置! 2.前端 这是动态input file上传 ...
- 框架基础:ajax设计方案(三)--- 集成ajax上传技术 大文件/超大文件前端切割上传,后端进行重组
马上要过年了,哎,回家的心情也特别的激烈.有钱没钱,回家过年,家永远是舔舐伤口最好的地方.新的一年继续加油努力. 上次做了前端的ajax的上传文件技术,支持单文件,多文件上传,并对文件的格式和大小进行 ...
- 前端通信:ajax设计方案(四)--- 集成ajax上传技术 大文件/超大文件前端切割上传,后端进行重组
马上要过年了,哎,回家的心情也特别的激烈.有钱没钱,回家过年,家永远是舔舐伤口最好的地方.新的一年继续加油努力. 上次做了前端的ajax的上传文件技术,支持单文件,多文件上传,并对文件的格式和大小进行 ...
- 官方webupload上传多个文件或者图片的方法
文件上传 页面代码: <!--引入CSS--> <link rel="stylesheet" type="text/css" href=&qu ...
- c# asp.net mvc4 使用uploadify插件实现上传功能
[1]首先去官网下载插件:http://www.uploadify.com/download/ .ww我使用的是免费的,基于flash的版本.因为基于H5的版本需付费使用,然后使用该插件也就是做做毕设 ...
- JS如何获取上传标签的文件路径和文件名?
如何使用JS获取type="file"的标签上传文件的文件路径及文件名: 代码: <!doctype html><html lang="en" ...
随机推荐
- 决定以后再做公司的项目的时候,能够用其他语言的绝对不用delphi
1.delphi7的IDE真的很不友好 2.delphi7的控件有的有问题 3.delphi7居然不支持结构体的泛型存储 4.网上的解决文档超少,一些小bug,就要折腾半天 5.pascal语法太过结 ...
- Net Manager测试连接测试没有成功,用户权限问题,以管理员身份运行后测试成功
Net Manager测试连接测试没有成功,截图如下:
- 【文文殿下】快速傅里叶变换(FFT)学习笔记
多项式 定义 形如\(A(x)=\sum_{i=0}^{n-1} a_i x^i\)的式子称为多项式. 我们把\(n\)称为该多项式的次数界. 显然,一个\(n-1\)次多项式的次数界为\(n\). ...
- [ActionScript3.0] 使用FileReferenceList处理多个文件上载
package { import flash.display.Sprite; import flash.events.DataEvent; import flash.events.Event; imp ...
- 【python】10分钟教你用python打造贪吃蛇超详细教程
10分钟教你用python打造贪吃蛇超详细教程 在家闲着没妹子约, 刚好最近又学了一下python,听说pygame挺好玩的.今天就在家研究一下, 弄了个贪吃蛇出来.希望大家喜欢. 先看程序效果: 0 ...
- tomcat运行springboot项目war包
以最简单的spring boot demo项目来演示如何发布项目war包到tomcat,并成功运行(有很多小伙伴会出现404错误) 一.准备一个最简单的demo项目 在IDEA中新建一个项目,一直ne ...
- 考试题 T3
题意分析 首先\(\%\%\%\%olinr\)以及花_Q\(julao\)当场切题 然后就是怎么求 \[max(|a-A|,|b-B|)=max(a-A,A-a,B-b,b-B)\] 我们令\(x_ ...
- knova绘制矩形
效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- Oracle PL/SQL学习之基础篇(1)
1.PL/SQL,全称Procedure Language/SQL,过程化sql语言 PL/SQL的程序结构 declare --声明部分(包括变量.光标.例外声明) begin --语句序列(DML ...
- 01背包-记忆化搜索到成型的DP
记忆化搜索 #include<bits/stdc++.h> using namespace std; typedef long long ll; int n,W; int dp[105][ ...