file input 在ie9浏览器的拒绝访问错误

此文转载至 http://lililucky1211.iteye.com/blog/1916129

1. label  for 绑定元素响应事件,例如 点击label可以执行绑定的input 的button的事件,

Html代码  

  1. <label for="large_icon_url" class="btn_up file-up-btn">上传大图标</label>
  2. <input type="file" accept="image/*" class="input_f pics" maxnums="1" name="large_icon_url" id="large_icon_url">

label实现了好看的效果,但是由于ie安全限制问题,会拒绝非file浏览上传文件的访问,所以处理方法应该是让file附在lable的上面,然后是透明处理,直接点击file即可。

2. 转上传文件的隐藏处理:

IE input file隐藏不能上传文件解决方法

HTML/CSS 2013-05-30 上传,IE,input,file

又是IE的一个问题,近来是跟IE浏览器磕上了,这个问题发现不少人也遇到过,实在蛋疼。但今天这个不能算是一个bug,因为IE可能是从安全角度上考虑结果导致的。一步步来解读。

普通上传例子

首先普通的文件上传呢,很简单,前端代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />

        <title>file标签隐藏</title>

    </head>

    <body>

        <form action="http://192.168.1.99/upload/upload.php" method="post" enctype="multipart/form-data">

            <input onchange="document.forms[0].submit();" type="file" name="file" />

        </form>

    </body>

</html>

upload.php代码:


1

2

3

echo ‘<pre>‘;

print_r($_FILES["file"]);

echo ‘</pre>‘;

其实就是打印获取到的文件信息。我们测试一下,选择文件后,提交到PHP页面结果如下:

Array
(
    [name] => 7.jpg
    [type] => image/jpeg
    [tmp_name] => /tmp/php0VkjPG
    [error] => 0
    [size] => 36297
)

能正确获取文件信息,只需要cp下就能保存。

用别的按钮替代file标签

但是默file标签很难看,而且每个浏览器下都有很大差距。因此我们基本都把真正的file标签给隐藏,然后创建一个标签来替代它,比如我们创建一个a标签来替代它,隐藏file标签,单击a标签时触发file标签click弹出选择文件窗口。最终页面代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8" />

        <title>file标签隐藏</title>

    </head>

    <body>

        <form action="http://192.168.1.99/upload/upload.php" method="post" enctype="multipart/form-data" style="display:none;">

            <input onchange="document.forms[0].submit();" type="file" name="file"  />

        </form>

        <a onclick="document.forms[0].file.click();" href="javascript:void(0);" >上传文件</a>

    </body>

</html>

页面上就只看见a标签

点击“上传文件”弹开选择文件的窗口

选择文件后,正确传送文件信息到服务器

这样就完成文件上传了,这个操作在Chrome,FireFox下都正常,IE下有问题。

IE不能上传文件

IE下也能正常弹开选择文件的窗口

但选择文件后,却不能上传,同时还报一个“拒绝访问”错误,如截图中红圈部分

解决IE下不能上传文件的问题

其实这是IE安全限制问题,没有点击file的浏览按钮选择文件都不让上传,既然IE非得要亲自点击,我们可以变通一下,让自定义按钮存在又能真正点击到file标签。解决方案是让file标签盖在a标签上,但file是透明的,这样用户看到的是a标签的外观,实际点击是file标签。如图:

最终页面代码如下:


1

2

3

4

5

<a style="position:relative;display:block;width:100px;height:30px;background:#EEE;border:1px solid #999;text-align:center;"  href="javascript:void(0);" >上传文件

    <form action="http://192.168.1.99/upload/upload.php" method="post" enctype="multipart/form-data">

        <input style="position:absolute;left:0;top:0;width:100%;height:100%;z-index:999;opacity:0;" onchange="document.forms[0].submit();" type="file" name="file"  />

    </form>

</a>

页面:

需要注意几个问题
1、取消a标签onclick事件,因为实际上已经不需要a标签的onclick触发file的click了,而是直接就点击到file;
2、file标签不需要再设置display:none隐藏,而是通过opacity:0让它完全透明,实际它是浮在a标签之上
3、file标签设置position:absolute后要给left:0、top:0,否则file标签不会吻合覆盖a标签导致点击按钮的时候点不到file标签

我们再来测试一下:

点击按钮:

选择文件:

上传成功!

时间: 2024-08-28 15:38:54

file input 在ie9浏览器的拒绝访问错误的相关文章

[经使用有效]Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法

sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法 最近几天从网上找了几个asp.net的登录案例想要研究研究代码,结果在用 Sql Server2005附加数据库文件时弹出错误信息:如下图: ,一时无解,遂求助于百度谷歌,经过各种试验,特将解决办法整理于此,希望能帮到大家,同时如果有好的意见大家多多交流啊! 方案一:切换登录方式 出现这种情况是由于用“混合验证方式”(SQL Server身份验证)登录数据库造成的,只要将登录方式改为“windows身

SQLServer2005+附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法

SQLServer2005+ 附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法 我们在用Sql SQLServer2005+附加数据库文件时弹出错误信息如下图的处理办法: 方案一:切换登录方式 出现这种情况是由于用"混合验证方式"(SQL Server身份验证)登录数据库造成的,只要将登录方式改为"windows身份验证方式"登录即可解决该问题,附加成功后再换用"混合验证模式"登陆就没问题了. 方案二:修改服务 选择 所有程序

在IIS上发布网站后,在编译时出现CS0016拒绝访问错误

错误如下图所示: 关键性错误信息: 编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\8b0443a9\fbbcc979\App_global.asax.nc86sxiq.dll”--“拒绝访问. ” 解决方法及原因: 因为IIS在编译网站时,会将编译的文件存放在系统临时文件夹里,然后将系统临时文件夹里的程序集拷贝到IIS的临时目录里,这边出

SQL Server附加数据库拒绝访问错误解决方法

今天在MsSQL里附加数据库时提示操作系统错误5(拒绝访问),这里我没给出了两个解决方案供大家解决问题. 方案一:切换登录方式 出现这种情况是由于用“混合验证方式”(SQL Server身份验证)登录数据库造成的,只要将登录方式改为“windows身份验证方式” 登录即可解决该问题,附加成功后再换用“混合验证模式”登陆就没问题了. 方案二:修改服务 选择 所有程序-SQL Server 2005-配置工具-选择”SQL Server Configuration Manager”或者“SQL Se

(WIN7)delphi7运行关闭出现cannot creat file&quot;C:\program file\borland\delphi7\bin\initcc32.exe拒绝访问

1. 程序右键,以管理权限运行.2. 将Delphi7目录只读取消.WIN7以上的操作系统正常运行程序不是以管理员方式运行的

VS2013 生成项目时出现DLL文件无法复制被拒绝访问错误

问题描述 无法将文件“obj\Release\Ctrl.yunBack.dll”复制到“bin\Ctrl.yunBack.dll”.对路径“bin\Ctrl.yunBack.dll”的访问被拒绝. 解决办法 找到bin目录删掉该文件.

&quot;visual studio 2012 安装引擎拒绝访问&quot; 错误的解决

首先,我们看一下错误的具体提示,如下图所示: 这个错误,是我安装了那么多年Visual Studio的经历中,第一次遇到.太恶心了,昨天一直安装失败,导致后续其它软件的安装一再拖延.目前网上的解决方案十分稀少,而且95%的都是错误的.本人,在此给予你们一个稍微靠谱的解决方法.具体来讲就是点击上图中的“此处”,查看安安装日志,并按照时间的先后顺序,翻到最后关键错误信息处, 本人电脑上出现的具体错误相关信息如下: [1B18:1BC0][2016-07-10T09:38:31]: MUX:  Fre

兔子--net stop mysql或者是net start mysql出现拒绝访问错误

解决办法:以管理员的身份运行cmd

哈哈:sqlserver2008附加数据库时操作系统错误5(拒绝访问)错误5012的解决办法

老师说:无论干什么,出错了,先大笑三声.如果人多了,在心里也要大笑三声.哈哈哈!!! 刚刚重装系统完后,然后想学习.自己去安装sqlserver2008数据库,完之后想附加之前的数据库.可是当我一点确定按钮时,就出现了这样一个错误. 我看了这个图片,我纳闷了大半天.怎么解决都解决不了. 我以为是登录方式的原因,就切换了登陆方式:混合验证方式”(SQL Server身份验证,登录方式改为“windows身份验证方式.但还是解决不了. 我就从网上查了资料.终于解决了. 为了以后有人可能还遇到这样的事