当前位置: 代码迷 >> ASP.NET >> 求教,单页面上传附件有关问题与讨论
  详细解决方案

求教,单页面上传附件有关问题与讨论

热度:5959   发布时间:2013-02-25 00:00:00.0
求教,单页面上传附件问题与讨论。
在vs2005中,关于用户上传附件的操作,我想用ajax.net操作,但是不能实现多次上传,我用的是刷新的方式做的,
不知道现在大家有什么好的解决方案,一起讨论一下:
要求:
1.一张页面内有8个要求上传附件的选项。
2.每个上传附件的选项,最多可以上传10项内容。
3.附件内容形式是图片和文本。
4.上传的附件可以删除(最好可以修改)。
需要附件的页面是一张大的表单,有60左右字段,一方面要考虑界面友好交互,另一方面也要考虑与数据库的交互情况。
根据以上要求,我用比较笨的方法可以基本实现功能,功能实现了,我想考虑怎么能有更好的方法解决这个问题。
下面是我笨拙的代码,希望给点建议。
protected void lbtnOupload1_Click(object sender, EventArgs e)
  {
  if (!string.IsNullOrEmpty(FileUpload1.FileName))
  {
  int i = (int)ViewState["count1"];
  if (i == 4)//记录附件个数 
  {
  lbtnOupload1.Visible = false;
  FileUpload1.Visible = false;
  }
  string LastName = "";
  string FileName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Second.ToString();
  string fileurl = common.DoFileUpload(FileUpload1, Server.MapPath("attFile"), FileName, out LastName);//调用上传方法,上传图片。
  if (LastName == "gif" || LastName == "jpg" || LastName == "jpeg")//判断附件类型 
  {//图片类
  ViewState["upload1"] += "<a href=attFile/" + fileurl + " target='_blank'><img src=attFile/" + fileurl + " width='60' height='60'/></a>,";
  lblupload1.Text = ViewState["upload1"].ToString();//显示图片的串进行累加,显示所有上传的图片
  ViewState["lbluplaod1"] += fileurl + ",";//记录图片的路径,插入到数据库中

  }
  else
  {//文本类
  ViewState["upload1"] += "<a href=attFile/" + fileurl + " >" + fileurl + "</a>,";
  lblupload1.Text = ViewState["upload1"].ToString();
  ViewState["lbluplaod1"] += fileurl + ",";
  }

  ViewState["count1"] = (int)ViewState["count1"] + 1; //记录附件个数
  }

  }

protected void lbtnUndo2_Click(object sender, EventArgs e)
  {
  ViewState["count1"] = (int)ViewState["count1"] - 1; //设置获取上传文件的个数
  string UploadStr = lblupload1.Text.Remove(lblupload1.Text.Length - 1);//UploadStr是上传后记录图片的字符串 
  string RemoveFileUrl = null;//要删除的文件字符串
  int intLastIndexOf = UploadStr.LastIndexOf(",") == -1 ? 0 : UploadStr.LastIndexOf(",");
  int count = UploadStr.Substring(intLastIndexOf).Length;
  string UploadFileUrl = (string)ViewState["lbluplaod1"];//设置上传的文件的路径
  UploadFileUrl = UploadFileUrl.Remove(UploadFileUrl.Length - 1);//删除上传图片的路径
  int FileUrl = UploadFileUrl.Substring(UploadFileUrl.LastIndexOf(",") == -1 ? 0 : UploadFileUrl.LastIndexOf(",")).Length;//获取上传附件个数
  RemoveFileUrl = UploadFileUrl.Substring(UploadFileUrl.LastIndexOf(",") == -1 ? 0 : UploadFileUrl.LastIndexOf(","));//要删除的当前附件字符串
  lblupload1.Text = UploadStr.Remove(UploadStr.Length - count) + ",";//从字符串中删除当前的字符串
  ViewState["upload1"] = UploadStr.Remove(UploadStr.Length - count) + ",";附件个数-1
  ViewState["lbluplaod1"] = UploadFileUrl.Remove(UploadFileUrl.Length - FileUrl) + ",";

  Artworks artWorks = new Artworks();//执行数据库操作
  if (RemoveFileUrl.Remove(RemoveFileUrl.Length - 1) != "")
  {
  int intIndex = RemoveFileUrl.IndexOf(",");
  string DelUpLoadfile = RemoveFileUrl;
  if (intIndex != -1)
  {
  DelUpLoadfile = RemoveFileUrl.Remove(0, 1);
  }
  artWorks.DeleteUpLoadFile(DelUpLoadfile, tbOrderID.Text);
  }
  }
   




------解决方案--------------------------------------------------------
帮你顶一下吧!
------解决方案--------------------------------------------------------
ding
------解决方案--------------------------------------------------------
UP!
------解决方案--------------------------------------------------------
mark

等高手提出好的方法吧
------解决方案--------------------------------------------------------
為什么用ajax就不能實現多文件上傳?肯定可以的。
另外FileUpload不支持異步,Updatepanel也用不了。

下面這是我自己的,抄了不少網上的,自己也添加了一些,我發現這玩意只能用一次,第二次就不行了,LZ用試試看
C# code
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UpLoad.aspx.cs" Inherits="UpLoad" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>     <head>         <title>多文件上传</title>        <script type="text/javascript" language="javascript">            function addFile()                 {                     var str = '<INPUT type="file" size="50" NAME="File" ></br>' ;                    document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str);                }             function forReset()                {                    var files=document.getElementsByName("File");                    for(var j=0; j<files.length; j++)                    {                        files[j].outerHTML=files[j].outerHTML.replace(/value=\w/g,'');                    }                }        </script>    </head>     <body>         <form id="form1" method="post" runat="server" enctype="multipart/form-data">             <div align="center">                <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>                <asp:UpdatePanel ID="UpdatePanel1" runat="server">                    <ContentTemplate>                        <div>                            <p>                                <asp:TextBox runat="server" ID="txtName"></asp:TextBox>                            </p>                            <p>                                <asp:DropDownList ID="ddlAction" runat="server" AutoPostBack="true"                                    onselectedindexchanged="ddlAction_SelectedIndexChanged" >                                    <asp:ListItem Value="true"></asp:ListItem>                                    <asp:ListItem Value="false"></asp:ListItem></asp:DropDownList>                            </p>                            <p>                                <asp:RadioButton ID="radYes" runat="server" GroupName="groupName1"/>                                <asp:RadioButton ID="radNo" runat="server" GroupName="groupName1"/>                            </p>                        </div>                        <div>                                                <p id="MyFile"><input type="file" size="50" name="File" /><br/></p>                        <p>                             <input type="button" value="增加(Add)" onclick="addFile()"/>                             <input onclick="forReset()" type="button" value="重置(ReSet)"/>                             <asp:Button Runat="server" Text="开始上传" ID="UploadButton"></asp:Button>                         </p>                         <p>                             <asp:Label id="strStatus" runat="server" Font-Names="宋体" Font-Bold="True" Font-Size="9pt"                                 Width="500px" BorderStyle="None" BorderColor="White"></asp:Label>                         </p>                        <p>                            <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>                        </p>                          </div>                    </ContentTemplate>                    <Triggers>                        <asp:AsyncPostBackTrigger ControlID="UploadButton" EventName="Click" />                    </Triggers>                </asp:UpdatePanel>            </div>         </form>     </body> </html>
  相关解决方案