一个小小的改动就能搞定,请大大帮我看一下,来看的都有分

WWWDJ1983 2007-02-05 02:34:10
下面是我多文件上传的代码:请帮我看一下上传的文件大小为什么都是0,文件内容都不见了,请问这个要如何改?先拜谢~~
public static DataTable upfiles;
public void CreatTable()
{
upfiles = new DataTable("upfile");
DataColumn[] keys = new DataColumn[1];
keys[0] = upfiles.Columns.Add("filename", typeof(string));
keys[0].AllowDBNull = false;
upfiles.PrimaryKey = keys;
upfiles.Columns.Add("filestream", typeof(Stream));
fname.Text = "";
fname1.Text = "";
}
/// <summary>
/// 增加附件至列表
/// </summary>
private void AddFile()
{
if (upfiles == null)
{
CreatTable();
}
if (myFile.PostedFile.FileName != "")
{
string nam = myFile.PostedFile.FileName;
int i = nam.LastIndexOf("\\");
string filename = nam.Substring(i + 1);
if (upfiles.Rows.Find(filename) == null)
{
Stream fstream = myFile.PostedFile.InputStream;
DataRow dr = upfiles.NewRow();
dr[0] = filename;//获取文件名
upfiles.Rows.Add(dr);//增加
ArrayList dc = new ArrayList();
for (int j = 0; j < upfiles.Rows.Count; j++)
{
DataRow df = upfiles.Rows[j];
dc.Add(df[0].ToString());
}
files.DataSource = dc;
files.DataBind();
}
}
}
private void UploadFile()
{
string userId = this.GetSessionState("userId");
if (upfiles.Rows.Count > 0)
{
fname.Text = "";
for (int j = 0; j < upfiles.Rows.Count; j++)
{
DataRow dr = upfiles.Rows[j];
string topath = (this.GetSessionState("userId") + "/") + dr[0];
string absolutepath = Server.MapPath(topath);
fname.Text += topath.ToString() + ";";
myFile.PostedFile.SaveAs(absolutepath);
}
}
}
...全文
533 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
marchonchina 2007-02-06
  • 打赏
  • 举报
回复
学到不少
zhaoyuechao 2007-02-05
  • 打赏
  • 举报
回复
JUST 学习
toddzst 2007-02-05
  • 打赏
  • 举报
回复
up
WWWDJ1983 2007-02-05
  • 打赏
  • 举报
回复
强哥,谢谢你,我再看下
WWWDJ1983 2007-02-05
  • 打赏
  • 举报
回复
哦,我知道了这个也是可以上传多附件的


myFile.PostedFile.SaveAs(absolutepath);

改成:int FileLen = Convert.ToInt32(dr[1]);
byte[] input = new byte[FileLen];
((System.IO.Stream)dr[2]).Read(input, 0, FileLen);
FileStream fw = new FileStream(absolutepath, FileMode.Create, FileAccess.Write);
fw.Write(input, 0, FileLen);
fw.Close();
九章落地 2007-02-05
  • 打赏
  • 举报
回复
應該可以呀,我們看看別人的實例:
1、在AddFile(...)裡,把文件轉成二進制流保存到DataTable:
......
Stream fstream=myFile.PostedFile.InputStream;
.....
dr[2]=fstream;//文件流

2、在UploadFile(...)裡,把二進制流轉成文件
DataRow dr=upfiles.Rows[j];
string topath=Server.MapPath(".\\"+dr[0]);
int FileLen=Convert.ToInt32(dr[1]);
byte[] input = new byte[FileLen];
((System.IO.Stream)dr[2]).Read(input, 0, FileLen);
FileStream fw = new FileStream(topath,FileMode.Create,FileAccess.Write);
fw.Write(input,0,FileLen);
fw.Close();
//其中,變量topath存的是服務器上的文件保存路徑。

WWWDJ1983 2007-02-05
  • 打赏
  • 举报
回复
ydsunny(小强)

他的这个还能改吗
二進制流直接轉成文件的话,路径就不对了
WWWDJ1983 2007-02-05
  • 打赏
  • 举报
回复
我这一个月来总是把邮箱给做的差不多了,本来以为内容是空的只是个小问题,一直没去管它,现在回头来改,才发现一开始就弄错了,后面好多相关的都要重弄了,哎
九章落地 2007-02-05
  • 打赏
  • 举报
回复
可以啊。樓主照著實例做不就行啦。


如果思路不清晰,樓主再看看你帖出來的別人的實例。^_^
WWWDJ1983 2007-02-05
  • 打赏
  • 举报
回复
好可怜啊
WWWDJ1983 2007-02-05
  • 打赏
  • 举报
回复
ydsunny(小强) ( ) 信誉:100 Blog 2007-02-05 16:02:01 得分: 0


早貼出來就不會這麼麻煩了!
樓主你看下例子,單個文件上傳的時候,它把文件轉成二進制流並保存到DataTable裡。
最後上傳時,把二進制流直接轉成文件,在上傳的時候樓主用一個uploadfile來代替二制流,自然不行,所以得到的結果都為空。


我晕死了,不能用DataTable做?不是吧,我后面的设计全都要重写了,天哪
XJY123 2007-02-05
  • 打赏
  • 举报
回复
顶了,研究研究先
九章落地 2007-02-05
  • 打赏
  • 举报
回复
早貼出來就不會這麼麻煩了!
樓主你看下例子,單個文件上傳的時候,它把文件轉成二進制流並保存到DataTable裡。
最後上傳時,把二進制流直接轉成文件,在上傳的時候樓主用一個uploadfile來代替二制流,自然不行,所以得到的結果都為空。
cpp2017 2007-02-05
  • 打赏
  • 举报
回复
看看这个,不知道对你没没有帮助 http://blog.csdn.net/cpp2017/archive/2007/02/01/1499496.aspx
WWWDJ1983 2007-02-05
  • 打赏
  • 举报
回复
ydsunny(小强)
我网上找来的,你看一下,他这个可以正确上传多附件
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Data" %>
<%@ page Language="C#" debug="true" %>

<html>
<head>
<title>一个HTMLINPUTFILE实现多文件上传示例</title>
<script language="C#" runat="server">
public static DataTable upfiles;
public void CreatTable()
{
upfiles = new DataTable("upfile");
DataColumn[] keys= new DataColumn[1];
keys[0]= upfiles.Columns.Add("filename",typeof(string));
keys[0].AllowDBNull=false;
upfiles.PrimaryKey= keys;
upfiles.Columns.Add("filelength",typeof(Int32));
upfiles.Columns.Add("filestream",typeof(Stream));
Span1.InnerHtml ="";
fcount.Text="";
fname.Text="";
fsize.Text="";
}

public void AddFile(object sender , EventArgs E)
{
if (upfiles==null){
CreatTable();
}
if(myFile.PostedFile.FileName!="")
{
string nam = myFile.PostedFile.FileName ;
int i= nam.LastIndexOf("\\") ;
string filename =nam.Substring(i+1) ;
if(upfiles.Rows.Find(filename)==null)
{
int filelen=myFile.PostedFile.ContentLength;
Stream fstream=myFile.PostedFile.InputStream;
DataRow dr=upfiles.NewRow();
dr[0]=filename;//获取文件名
dr[1]=filelen;//文件长度
dr[2]=fstream;//文件流
upfiles.Rows.Add(dr);//增加
ArrayList dc=new ArrayList();
for(int j=0;j<upfiles.Rows.Count;j++)
{
DataRow df=upfiles.Rows[j];
dc.Add(df[0].ToString());
}
files.DataSource=dc;
files.DataBind();

// fname.Text+=" "+filename+"<br>";
// fcount.Text=upfiles.Rows.Count.ToString();
// fsize.Text+=filelen.ToString()+"<br>";
}


}
else{
Span1.InnerHtml ="<font color=red>请选择文件!</font>";
}
}

public void RemoveFile(object sender , EventArgs E)
{
if(files.SelectedItem.Value!=null){
string fname=files.SelectedItem.Value;
DataRow foundRow= upfiles.Rows.Find(fname);
if(foundRow!=null)
upfiles.Rows.Remove(foundRow);
ArrayList dc=new ArrayList();
for(int j=0;j<upfiles.Rows.Count;j++)
{
DataRow df=upfiles.Rows[j];
dc.Add(df[0].ToString());
}
files.DataSource=dc;
files.DataBind();
}
else{
Span1.InnerHtml ="<font color=red>请选择文件!</font>";
}
}

public void UploadFile(object sender , EventArgs E)
{
fcount.Text=upfiles.Rows.Count.ToString();
if(upfiles.Rows.Count>0)
{
fname.Text="";
fsize.Text="";
for(int j=0;j<upfiles.Rows.Count;j++)
{

DataRow dr=upfiles.Rows[j];
string topath=Server.MapPath(".\\"+dr[0]);
int FileLen=Convert.ToInt32(dr[1]);
byte[] input = new byte[FileLen];
((System.IO.Stream)dr[2]).Read(input, 0, FileLen);
FileStream fw = new FileStream(topath,FileMode.Create,FileAccess.Write);
fw.Write(input,0,FileLen);
fw.Close();
fname.Text+=" "+dr[0].ToString()+"<br>";
fsize.Text+=" "+dr[1].ToString()+"<br>";
Span1.InnerHtml +="<font color=Blue>文件"+(j+1).ToString()+"上传成功!<br></font>";
}
}
upfiles=null;
}

</script>
</head>
<body>
<center><br><br>
<h3> 一个HTMLINPUTFILE实现多文件同时上传示例 </h3>
<form id="uploderform" method="post" action="upload.aspx" enctype="multipart/form-data" runat="server" >

<table border="1" cellspacing="0" cellpadding="0" >
<tr><td> 请选择上传文件
<input type="file" id="myFile" MaxLength="50" Size="40" runat="server" >
</td><td> <input type="button" value="添加到列表" OnServerClick="AddFile" runat="server" ></td></tr>

<tr><td width=250 align=center>已选择的上传文件列表<br>
<asp:DropDownList id="files" runat="server"></asp:DropDownList>
</td>
<td align=center><input type="button" value="移走文件" OnServerClick="RemoveFile" runat="server" ><br>
</td></tr>
<tr><td colspan=2 align=cneter >注意:上传文件大小限制在XXM以下!
<input type="button" value="上传全部文件" OnServerClick="UploadFile" runat="server" >
</td></tr>

</table>
</form>
<br>
<br>
<table border="1" cellspacing="0">
<tr><td td colspan=2 align=center><b>多文件上传情况</b></td>
</tr>
<tr><td colspan=2 align=center><b><span id="Span1" runat="server" />
</b></td><tr>
</tr>
<tr>
<td>文件个数 :</td>
<td><asp:label id="fcount" text="" runat="server" /></td></tr>
<tr>
<td>文件名称 :</td>
<td><asp:label id="fname" text="" runat="server" /></td></tr>
<tr>
<td>文件类型 :</td>
<td><asp:label id="fenc" runat="server" /></td></tr>
<tr>
<td>文件大小 :(in bytes)</td>
<td><asp:label id="fsize" runat="server" /></td></tr>
</table>
<br>
<br>
<br>
<h5><a href="http://www.eq-hi.ac.cn/">lzx制作</a></h5>
</center>
</body>
</html>
九章落地 2007-02-05
  • 打赏
  • 举报
回复
呵呵,被樓主騙了!!!
你的題目是:一個小小的改動就能搞定。。。。以樓主的實現方式看,此思路存嚴重問題。
uploadfile控件不支持賦值,所以一個uploadfile控件只能上傳一個文件。
除非能找到其他的上傳控件,不然樓主得改變思路。
多次上傳或用多個uploadfile的方式吧。
lz_mike 2007-02-05
  • 打赏
  • 举报
回复
看啦不懂
帮楼主 顶下!
darey_dry 2007-02-05
  • 打赏
  • 举报
回复
我看了,没看完...
但还是看了...
WWWDJ1983 2007-02-05
  • 打赏
  • 举报
回复
lovehongyun(一个人的电影) ( ) 信誉:100 Blog 2007-02-05 15:23:37 得分: 0

循环出的问题.

那多个文件是可以上传到正确的地方的,就是内容空了


WWWDJ1983 2007-02-05
  • 打赏
  • 举报
回复
cengyidao(曾一刀)
刚才试了一下,好像不行

ydsunny(小强)

absolutepath中已经包含文件本地绝对路径了,
那path怎么写啊
是行如: E:\OA\PersonalOffice\Mail
加载更多回复(13)

62,071

社区成员

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

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

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

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