在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>