ASP.net 如何只用一个FileUpLoad 实现多文件上传(可加用DropDownList),一定要是点了按扭之后一起上传

zpcoder 2008-08-26 10:07:39
RT: ASP.net 如何只用一个FileUpLoad 实现多文件上传(可加用DropDownList),一定要是点了按扭之后一起上传
...全文
613 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
rick1680 2011-01-04
  • 打赏
  • 举报
回复
protected void btnAddImage_Click(object sender, EventArgs e)
{
if (fudUploadFile.FileName == "")
{
Response.Write("请选择要上传的文件");
}
else if (fudUploadFile.FileName.Substring(fudUploadFile.FileName.LastIndexOf(".") + 1).CompareTo("jpg") != 0)
{
Response.Write("请选择图片文件");
}
else if(fudUploadFile.FileBytes.Length > size)
{
Response.Write(fudUploadFile.FileBytes.Length);
}
else
{
files = (List<ImageInfo>)Session[Session_Key_List];
string name = fudUploadFile.FileName;
string path_ = fudUploadFile.PostedFile.FileName;
string path = path_.Substring(0, path_.LastIndexOf("\\") + 1);
AddFile(new ImageInfo(name, path, "图片路径无效", fudUploadFile));
Response.Write(path);
Session[Session_Key_List] = files;
dlImageView.DataSource = files;
dlImageView.DataBind();
}
}

将每个文件作为对象存储到list里,然后用数据绑定,最后遍历list 逐个上传。

可以多个传送,而且ie6还可以支持本地预览。但是不能浏览多个同时增加到列表,因为fileupload控件 不能动态实例话,有兴趣一起探讨的可以加我,能够实现多文件浏览,并选择上传。
niuniuhuang 2008-08-30
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ojekleen 的回复:]
引用 9 楼 niuniuhuang 的回复:
引用 4 楼 ojekleen 的回复:
上传文件的关键点就是怎么去获取客户端的文件路径,有一个fileupLoad就足够了,关键是你怎么去保存这些文件的路径。

你好搞笑,你给我做一下,我现在有个这样的文件c:/test.txt,你给保存到服务器看看

呵呵,搞笑不要紧,无知就可怕了,你想不到也应该发过邮件吧,发送附件的方式你不会没有用过吧.
[/Quote]
还是星星呢,无语,你知道发邮件的是怎么做的?你看看我上面的代码,
发邮件的时候你看到的是直接显示一个文件名那没错,但是还是隐藏了input file控件
真不知道谁无知,不知道就别在这丢人
ojekleen 2008-08-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 niuniuhuang 的回复:]
引用 4 楼 ojekleen 的回复:
上传文件的关键点就是怎么去获取客户端的文件路径,有一个fileupLoad就足够了,关键是你怎么去保存这些文件的路径。

你好搞笑,你给我做一下,我现在有个这样的文件c:/test.txt,你给保存到服务器看看
[/Quote]
呵呵,搞笑不要紧,无知就可怕了,你想不到也应该发过邮件吧,发送附件的方式你不会没有用过吧.
jiang_jiajia10 2008-08-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fangq 的回复:]
不行,不能实现一个file上传多个文件,只能用js实现动态增加file然后历遍上传
[/Quote]
niuniuhuang 2008-08-26
  • 打赏
  • 举报
回复
把fi.gif改为http://p.mail.163.com/js31style/lib/0703131650/163blue/f1.gif
niuniuhuang 2008-08-26
  • 打赏
  • 举报
回复
css中的f1.gif是从网易邮箱里面下载的,你可以下载下来或者直接用网络地址
niuniuhuang 2008-08-26
  • 打赏
  • 举报
回复
<html>
<head id="Head1" runat="server">
<title>无标题页</title>

<script type="text/javascript">
function MultiSelector(list_target, max)
{
// Where to write the list
this.list_target = list_target;
// How many elements?
this.count = 0;
// How many elements?
this.id = 0;
// Is there a maximum?
if (max){this.max = max;}else{this.max = -1;}
/**
* Add a new file input element
*/
this.addElement = function(element)
{
// Make sure it's a file input element
if (element.tagName == 'INPUT' && element.type == 'file')
{
// Element name -- what number am I?
element.name = 'file_' + this.id++;
// Add reference to this object
element.multi_selector = this;
// What to do when a file is selected
element.onchange = function()
{
var inputs = document.getElementsByTagName("input");
var count = 0;
for(var i=0;i<inputs.length;i++)
{
if (inputs[i].type == 'file')
{
if(this.value==inputs[i].value)
{
count++;
}
}
}
if(count>1)
{
alert("该文件已存在!");
//this.outerHTML=this.outerHTML;
return false;
}
if(!this.value.IsPicture())
{
alert("只能上传图片!");
//this.outerHTML=this.outerHTML;
return false;
}

// New file input
var new_element = document.createElement('input');
new_element.type = 'file';
new_element.size = 1;
new_element.className = "addfile";
// Add new element
this.parentNode.insertBefore(new_element, this);
// Apply 'update' to element
this.multi_selector.addElement(new_element);
// Update list
this.multi_selector.addListRow(this);
// Hide this: we can't use display:none because Safari doesn't like it
this.style.position = 'absolute';
this.style.left = '-1000px';
}
// If we've reached maximum number, disable input element
if (this.max != -1 && this.count >= this.max)
{
element.disabled = true;
}
// File element counter
this.count++;
// Most recent element
this.current_element = element;
}
else
{
// This can only be applied to file input elements!
alert('Error: not a file input element');
}
}
/**
* Add a new row to the list of files
*/
this.addListRow = function(element)
{
// Row div
var new_row = document.createElement('div');
new_row.className="divName";
// Delete button
var new_row_button = document.createElement('input');
new_row_button.type = 'button';
new_row_button.value = '删除';
// References
new_row.element = element;
// Delete function
new_row_button.onclick = function()
{
// Remove element from form
this.parentNode.element.parentNode.removeChild(this.parentNode.element);
// Remove this row from the list
this.parentNode.parentNode.removeChild(this.parentNode);
// Decrement counter
this.parentNode.element.multi_selector.count--;
// Re-enable input element (if it's disabled)
this.parentNode.element.multi_selector.current_element.disabled = false;
// Appease Safari
// without it Safari wants to reload the browser window
// which nixes your already queued uploads
return false;
}
// Set row value
var filename = element.value.substring(element.value.lastIndexOf("\\")+1);
new_row.innerHTML = filename;
// Add button
new_row.appendChild(new_row_button);
// Add it to the list
this.list_target.appendChild(new_row);
}
}
String.prototype.IsPicture = function()
{
//判断是否是图片 - strFilter必须是小写列举

var strFilter=".jpeg|.gif|.jpg|.png|.bmp|.pic|"
if(this.indexOf(".")>-1)
{
var p = this.lastIndexOf(".");
var strPostfix=this.substring(p,this.length) + '|';
strPostfix = strPostfix.toLowerCase();
if(strFilter.indexOf(strPostfix)>-1)
{
return true;
}
}
return false;
}
</script>

<style type="text/css">
a.addfile
{
background-image: url(f1.gif);
background-repeat: no-repeat;
background-position: -823px -17px;
display: block;
float: left;
height: 25px;
margin-top: -1px;
position: relative;
text-decoration: none;
top: 0pt;
width: 65px;
overflow:hidden;
}
a.addfile:hover
{
background-position: -911px -17px;
}

input.addfile
{
cursor: pointer !important;
height: 25px;
left: -6px;
filter: alpha(opacity=0);
position: absolute;
width: 0px;
z-index: -1;
}
.divName
{
float:left;
margin-left:5px;
}
</style>
<base target="_self" />
</head>
<body>
<form id="form1" runat="server" enctype="multipart/form-data">
<div>
<table width="100%" style="text-align: left;">
<tr>
<th align="center">
添加文件
</th>
</tr>
<tr>
<td>
<a href="#" class="addfile" id="al">
<input id="my_file_element" class="addfile" runat="server" type="file" name="file_1" size="1" title="点击选择附件" />
</a> 
<asp:Button ID="btn_Ok" Height="25px" runat="server" Text="确定" OnClick="btn_Ok_Click" />
<br />
<%--Files:--%>
<!-- This is where the output will appear -->
<div id="files_list" style="border: none;width: 100%;">
</div>
<script type="text/javascript">
<!-- Create an instance of the multiSelector class, pass it the output target and the max number of files -->
var multi_selector = new MultiSelector(document.getElementById('files_list'), 100);
<!-- Pass in the file element -->
multi_selector.addElement(document.getElementById('my_file_element'));
</script>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
downmoon 2008-08-26
  • 打赏
  • 举报
回复

http://www.cnblogs.com/downmoon/archive/2008/07/23/1249410.html
兼容firefox浏览器
niuniuhuang 2008-08-26
  • 打赏
  • 举报
回复
一个FileUpLoad是搞不定的除非你自己写个OCX控件,
可以搞个类似的方法,例如2楼写的再改改就可以了先放一个控件,然后onchange后就添加一个控件,
并隐藏原来的那个,不过要在一个地方显示文件名并可以删除,就想网易邮箱的添加附件一样,
我前不就做了一个和网易一样的,上网搜一下网易邮箱的添加附件的代码就有
niuniuhuang 2008-08-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ojekleen 的回复:]
上传文件的关键点就是怎么去获取客户端的文件路径,有一个fileupLoad就足够了,关键是你怎么去保存这些文件的路径。
[/Quote]
你好搞笑,你给我做一下,我现在有个这样的文件c:/test.txt,你给保存到服务器看看
ylqmf 2008-08-26
  • 打赏
  • 举报
回复
HttpFileCollection files = HttpContext.Current.Request.Files;
从Request对象中找到所有要上传文件。
yuchangmao 2008-08-26
  • 打赏
  • 举报
回复
一个控件上传多个文件,这不现实
fangq 2008-08-26
  • 打赏
  • 举报
回复
不行,不能实现一个file上传多个文件,只能用js实现动态增加file然后历遍上传
tomiehu 2008-08-26
  • 打赏
  • 举报
回复
多文件上传后台处理很麻烦 可能会出错。
ojekleen 2008-08-26
  • 打赏
  • 举报
回复
上传文件的关键点就是怎么去获取客户端的文件路径,有一个fileupLoad就足够了,关键是你怎么去保存这些文件的路径。
lijin84100 2008-08-26
  • 打赏
  • 举报
回复
以上的代码可以实现,如果有不可以的,加我QQ给解决.515072775
lijin84100 2008-08-26
  • 打赏
  • 举报
回复
<html xmlns="http://www.w3.org/1999/xhtml" >
<HEAD>
<title>多文件上传</title>
<script language="JavaScript">
function addFile()
{
var str = '<br /><INPUT type="file" size="50" NAME="File">'
document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str)
}
</script>

<link href="../Css/dinwei.css" rel="stylesheet" type="text/css" />
</HEAD>
<body>
<form id="form1" method="post" runat="server" enctype="multipart/form-data">
<div align="center">
<h3>多文件上传</h3>
<P id="MyFile"><INPUT type="file" size="50" NAME="File"></P>
<P>
<asp:Button Runat="server" Text="开始上传" ID="UploadButton"></asp:Button>
<input onclick="this.form.reset()" type="button" value="重置(ReSet)">
<input type="button" value="增加(Add)" onclick="addFile()">

</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>
</div>
</form>
</body>
</HTML>


protected void Page_Load(object sender, EventArgs e)
{
if (this.IsPostBack) this.SaveImages();
}
private Boolean SaveImages()
{
///'遍历File表单元素
HttpFileCollection files = HttpContext.Current.Request.Files;
YXun.BLL.tv_FileTable fileControl = new YXun.BLL.tv_FileTable();//文件控制类
YXun.Model.tv_FileTable Obj;//文件实体类
/// '状态信息
StringBuilder strMsg = new StringBuilder();
strMsg.Append("<center> <strong>上传成功!</strong></center>");
strMsg.Append("上传的文件分别是:<hr color=red>");
try
{
for (int iFile = 0; iFile < files.Count; iFile++)
{
///'检查文件扩展名字
HttpPostedFile postedFile = files[iFile];
string fileName, fileExtension;
fileName = System.IO.Path.GetFileName(postedFile.FileName);
if (fileName != "")
{
fileExtension = System.IO.Path.GetExtension(fileName);
strMsg.Append("上传的文件类型:" + postedFile.ContentType.ToString() + "<br>");
strMsg.Append("客户端文件地址:" + postedFile.FileName + "<br>");
strMsg.Append("上传文件的文件名:" + fileName + "<br>");
strMsg.Append("上传文件的扩展名:" + fileExtension + "<br><hr>");
///'可根据扩展名字的不同保存到不同的文件夹
///注意:可能要修改你的文件夹的匿名写入权限。
postedFile.SaveAs(System.Web.HttpContext.Current.Request.MapPath("../UpLoadFile/") + fileName);
//添加到数据库中把信息
Obj = new YXun.Model.tv_FileTable();
Obj.FileName = fileName.Replace("'", "\'");
Obj.FilePath = "/UpLoadFile/" + fileName.Replace("'", "\'");
Obj.FileRemark = "";
Obj.AddTime = DateTime.Now;
Obj.ID = Guid.NewGuid().ToString();
fileControl.Add(Obj);
}
}
strStatus.Text = strMsg.ToString();
return true;
}
catch (System.Exception Ex)
{
strStatus.Text = Ex.Message;
return false;
}
}
yangpeiyu 2008-08-26
  • 打赏
  • 举报
回复
应该要使用多个吧,一个对应一对文件。
  • 打赏
  • 举报
回复
就是,肯定是可以了.网易邮箱就是这样的.
加载更多回复(2)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧