首页 新闻 会员 周边 捐助

希望各路大牛进来看看

0
[已关闭问题]

有个功能 需要上传文件 如图

 

我需要上传很多附件 但是吧 因为是复制的行 所以用不了 FileUpload.PostedFile.SaveAs 的功能了 我就想用 FileStream 写文件 。在本机测试是好使的,但是放到

服务器上时 就不对了 具体代码 如下

1 private byte[] Readfile(string filpath)
2 {
3 FileStream fs = new FileStream(filpath, FileMode.Open, FileAccess.Read);
4 BinaryReader rd = new BinaryReader(fs);
5 byte[] buffer = new byte[fs.Length];
6 rd.Read(buffer, 0, (int)fs.Length);
7
8 rd.Close();
9 fs.Close();
10 return buffer;
11
12 }
13
14 private string writefile(string filpath)
15 {
16 string name = "";
17 if (!string.IsNullOrEmpty(filpath))
18 {
19 string typ2 = filpath.Substring(filpath.LastIndexOf(".") + 1);
20
21 name = Common.Rand.Number(20) + "." + typ2;
22
23 FileStream fs = new FileStream(Server.MapPath("~/Files/") + name, FileMode.OpenOrCreate, FileAccess.Write);
24 BinaryWriter rw = new BinaryWriter(fs);
25 byte[] strbyte = Readfile(filpath);
26 rw.Write(strbyte);
27 rw.Close();
28 fs.Close();
29 }
30 return name;
31
32
33 }

 

 

提示错误 是

 

原因是服务器上找不到本机的这个路径 当然报错了

 

我想知道怎么能让服务器知道是本机的文件的路径呢

 

佳文:说 用//1.获取上传的文件列表
HttpFileCollection files = HttpContext.Current.Request.Files;
//2.遍历每个文件,进行保存
for (int i = 0; i < files.Count; i++)
{
    HttpPostedFile postedFile
= files[i];
    postedFile.SaveAs(Server.MapPath(
"~/Files/") + postedFile.FileName);
}
//3.完工,检查Files目录是不是有文件了.

 

这样弄 但是这样的前提是用asp:Button 控件 这样就会刷新 窗口 页面会把增加的行给清掉

 

所以 我是用jquery 增加的一行 用ajax 实现的添加数据 就不会被刷新页面 但是上传就不能用 FileUpload.PostedFile.SaveAs 方法了

感觉现在很矛盾 希望各路大牛进来看看

没有分了 有机会请喝酒吧..3q

 

 


scai的主页 scai | 初学一级 | 园豆:30
提问于:2010-04-22 15:07
< >
分享
其他回答(2)
0

加到隐藏域吧,用JS给【浏览】按钮加事件,onchange()设置隐藏域为文件路径

lifqing | 园豆:350 (菜鸟二级) | 2010-04-22 18:42
0

怎么能放到服务器呢  最好以二进制流保存到数据库   要下载的话 直接从数据库读出来就行了

_____昆 | 园豆:204 (菜鸟二级) | 2010-04-22 20:40
0

不明白你说的服务器上找不到本机路径是什么,如果只是上传文件的话,用得着上传者的本机路径吗?

如果想动态的上传多个文件的话:

html:

<form enctype="multipart/form-data" action="upload.aspx" method="post">

<input type="file" /> //可以用js动态添加多少

<input type="submit" /> //如果不刷新页面就用js阻止提交,并且ajax post过去(注意上面的属性设对)

</form>

upload.aspx:

//1.获取上传的文件列表
HttpFileCollection files = HttpContext.Current.Request.Files;
//2.遍历每个文件,进行保存
for (int i = 0; i < files.Count; i++)
{
    HttpPostedFile postedFile
= files[i];
    postedFile.SaveAs(Server.MapPath(
"~/Files/") + postedFile.FileName);
}

注:两者可以是同一文件,也可以分别是两个文件。一个文件的话就判断下是get还是post,get就显示html,post就接受与写入文件。

vons | 园豆:1033 (小虾三级) | 2010-04-23 10:03
ps:不要迷信控件认为只有某个控件才能达到某种功能。事实上,如果不用任何控件,照样可以用asp.net写同样功能的程序,而且性能更好。
支持(0) 反对(0) vons | 园豆:1033 (小虾三级) | 2010-04-23 10:07
也许你是不了解enctype="multipart/form-data",它让浏览器对文件进行编码,你只要设定好post的地址就好了,在接受post的地方,使用 HttpContext.Current.Request.Files 介绍:获取采用多部分 MIME 格式的由客户端上载的文件的集合。备注:备注 仅当 HTTP 请求 Content-Type 值为“multipart/form-data”时,才会填充该文件集合。
支持(0) 反对(0) vons | 园豆:1033 (小虾三级) | 2010-04-23 10:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册