iframe批量异步上传图片

1,

(1)在WebForm3.aspx定义一个iframe,隐藏

(2)指定form的action指向处理图片页面,target指向iframe(一定要写它的name,而不是id)

(3)当file的change时提交表单

下面是WebForm3.aspx的页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="WebApplication1.TestPage.WebForm3" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="../js/jquery-1.4.2.min.js" type="text/javascript"></script>
    <script type="text/javascript">
    //子页面iframe调用,拼接图片,加到本页面
        function UpImg(imgUrl) {          
            var img = "<img src=" + imgUrl + "/>";
            $("#form1").append($(img));
        }
        $(function () {
        //让按钮触发file的click,隐藏file
            $("#roombtn").click(function () {
                $("#roomfile").click();
            });
            $("#roomfile").change(function () {
                $("#form1")[0].submit();
            });
        });   
    
    </script>
</head>
<body>
    <iframe name="iframe1" style="display:none"  ></iframe>
    <form id="form1"  runat="server" action="PicUpload.aspx" target="iframe1"   >

     <input id="roombtn" type="button" class="sub" value="上传图片"  />    
     <input id="roomfile" runat="server" type="file"  multiple="multiple" style="display:none"  />                            
    
    </form>
</body>
</html>

2,

(1)在页面PicUpload的后台Page_Load方法中处理图片,并且将图片url以js变量的形式输出到PicUpload

页面。

(2)PicUpload页面的onload中指定处理图片的函数

在函数中调用父页面WebForm3.aspx的js方法,将图片添加到WebForm3.aspx页面

下面是PicUpload后台处理方法:

    public partial class PicUpload : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            HttpFileCollection files = HttpContext.Current.Request.Files;

            StringBuilder builder = new StringBuilder();
            builder.Append("var imgUrl='");//定义一个js变量
            for (int i = 0; i < files.Count; i++)
            {
                HttpPostedFile file = files[i];
                string fileName = Guid.NewGuid().ToString().Replace("-", "") + ".jpg";
                string filePath = "/";
                file.SaveAs(System.IO.Path.Combine(MapPath(filePath), fileName));
                builder.Append(filePath + fileName);//图片的相对路径
                builder.Append(",");//多张图分隔符号
            }
            builder.Length -= 1;//去除最后一个逗号
            builder.Append("'");
            this.Literal1.Text = builder.ToString();//赋值给前台的Literal1

        }
    }

下面是页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PicUpload.aspx.cs" Inherits="WebApplication1.TestPage.PicUpload" enableEventValidation="false" enableViewStateMac="false"  %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

<script type="text/javascript" src="../js/jquery-1.4.2.min.js"></script>
 <script type="text/javascript">
  <asp:Literal ID="Literal1" runat="server" EnableViewState="false"></asp:Literal>
 </script>  

   <script type="text/javascript">
       //这个函数在onload时执行,在它执行之前,Page_Load已经处理好图片
       function UpImg() {
           var imgs = new Array(); //定义一数组
           imgs = imgUrl.split(","); //字符分割 imgUrl是后台输出到 Literal1上的js变量

           for (i = 0; i < imgs.length; i++) {
               self.parent.UpImg(imgs[i]);//调用父页面的函数
           }
       }

   </script>  
</head>  
<body onload="UpImg()" >  
  
    <form id="form1" runat="server">  
    <div>  
   
    </div>  
    </form>  
</body>
</html>

注意:

1,PicUpload页面<%@ Page%>中要加enableEventValidation="false" enableViewStateMac="false"  

因为是从WebForm3.aspx向其他页面传递图片,而且WebForm3.aspx的form中要加runat,

否则取不到图片。

2,如果WebForm3.aspx中放多个file,都可以放在这一个form中,提交到后台可以通过Request.Files的

Keys判断出是哪个file上传的图片。

原文地址:https://www.cnblogs.com/wang7/p/2835610.html