PostedFile.SaveAs(strServerDir)之后文件变成0KB的问题.

chichenzhe 2009-11-24 01:20:30
问题类:
protected System.Web.UI.HtmlControls.HtmlInputFile m_fileLocal;
问题方法:
PostedFile.SaveAs(strServerDir)

首先,我肯定在WEB.config里设置了文件上限和timeout 最大化.
见:
<httpRuntime   executionTimeout="90"   maxRequestLength="409600"   useFullyQualifiedRedirectUrl="false"   minFreeThreads="18"   minLocalRequestFreeThreads="15"   appRequestQueueLimit="150"   enableVersionHeader="true"/>

有一点不明白:http://support.microsoft.com/kb/825739/zh-cn
executionTimeout="90"到底是不是90秒呢?


但是现在就是出问题了.
SaveAs之后 发现服务器上的文件为0KB.(2个月的使用以来 首次发现这个问题.) 不太可能是 异常了,因为后续代码都执行了.

怎么修改?

google搜索发现基本上只有英文论坛提及了这个问题.
贴个地址:http://community.discountasp.net/showthread.php?t=5146
可惜的是 跟帖描述的解决方法不适用.因为我早就设置了上传的大小和timeout.
...全文
621 31 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
mengyun1986 2009-12-11
  • 打赏
  • 举报
回复
上传前先判断下,给个提示

int fileLength =fileUpload.PostedFile.ContentLength;
if (fileLength == 0)
{
Alert("请关闭本地打开的文件后再上传");
return;
}
fileUpload.PostedFile.SaveAs(Server.MapPath(fileName));
mengyun1986 2009-12-11
  • 打赏
  • 举报
回复
100分就这样没啦。。。楼主啊,追加点分吧。。。
mengyun1986 2009-12-11
  • 打赏
  • 举报
回复
本来是来查找问题的,没有找到原因,只有自己研究啦,终于发现错误的原因:
你在本地打开了要上传的文件,导致上传失败。
您可以测试一下看看,把你打开的文件关闭掉,就上传成功啦。
camperer 2009-11-25
  • 打赏
  • 举报
回复
确实很诡异。。
telankes2000 2009-11-25
  • 打赏
  • 举报
回复
试试这个

public void UpLoadFile(System.Web.HttpPostedFile postFile, string savePath)
{
try
{
if (!Directory.Exists(Path.GetDirectoryName(savePath)))
Directory.CreateDirectory(Path.GetDirectoryName(savePath));
using (FileStream fs = new FileStream(savePath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
{
using (BinaryReader reader = new BinaryReader(postFile.InputStream))
{
int bufferLength = 0;
int readLength = 10240;
byte[] buffer = new byte[10240];
while (true)
{
bufferLength = reader.Read(buffer, 0, readLength);
if (bufferLength == 0) break;
fs.Write(buffer, 0, bufferLength);
}
}
}
}
catch (Exception ex)
{
throw new Exception(ex.Source + ex.Message);
}
}
telankes2000 2009-11-25
  • 打赏
  • 举报
回复
在上傳之前看看文件的大小
BinaryReader reader = new BinaryReader(postFile.InputStream)
if(reader.BaseStream.Length <0)
Response.Write("沒有可上傳的文件");
chichenzhe 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 yuxuanji 的回复:]
也可能是服务器装了主动防护软件的原因
[/Quote]

唯独拦截了我某一个上传行为?其他的不拦截?
LutzMark 2009-11-25
  • 打赏
  • 举报
回复
也可能是服务器装了主动防护软件的原因
chichenzhe 2009-11-25
  • 打赏
  • 举报
回复
回19楼,硬盘空间还有很多.至少10G

回20楼代码:

<TD style="HEIGHT: 4px"><FONT face="宋体">
<asp:Panel id="m_plStart" runat="server" Width="100%">上传文件地址 <INPUT id="m_fileLocal" style="WIDTH: 520px; HEIGHT: 22px" type="file" size="67" name="File1"
runat="server"><FONT face="宋体">  </FONT><INPUT id="m_bttUpload" type="button" value="添加计划" name="btnUp" runat="server"></asp:Panel>修改项目</FONT>
<asp:Button id="m_buttEdit" runat="server" Text="确认修改" Visible="False"></asp:Button></TD>
</TR>


m_dateTask = Convert.ToDateTime(this.d1.Value + " " + m_ddListHour.SelectedValue + ":" + m_ddListMinute.SelectedValue + ":00");
strServerDirName = DateTime.Now.ToString("yyyyMMddhhmmss") + ".CardSend." + strTaskName + ".txt";

strLocalFile = System.IO.Path.GetFileName(m_fileLocal.PostedFile.FileName);
if (strLocalFile != "")
{
//文件绝对路径获取.
strServerDir = System.Web.HttpContext.Current.Request.MapPath("Text/") + strServerDirName;
m_fileLocal.PostedFile.SaveAs(strServerDir);
}
telankes2000 2009-11-25
  • 打赏
  • 举报
回复
多少KB的文件被上传了
这个在开始上传的时候就可以知道的
postFile.InputStream/1024
不知道楼主到底要干什么
chichenzhe 2009-11-25
  • 打赏
  • 举报
回复
我只想到了一个 缓解之计:

就是完成上传之后 给我返回一个状态,告诉我这次有多少KB的文件被上传了.

或者是我安排完成任务之后做一个检查,查看今天的任务里 各个任务的 TXT各是多少KB.

只能这样了...

求 查 D:\WEB\XX\XXX.TXT 文件大小的代码.比如查出来是200KB,那么就返回一个值给我.

C# WEB编程的方式.
telankes2000 2009-11-24
  • 打赏
  • 举报
回复
把上傳的代碼貼出來看下
  • 打赏
  • 举报
回复
硬盘空间满?
chichenzhe 2009-11-24
  • 打赏
  • 举报
回复
回楼上.因为0KB导致任务失败了.

所以我不得不今天补发. 但是今天却成功了. 太蹊跷了.
xiamiking 2009-11-24
  • 打赏
  • 举报
回复
会不会是编码不一样,导致从流里还原的时候出现了问题
xiamiking 2009-11-24
  • 打赏
  • 举报
回复
额,会不会是文件本身的问题
出现了这个问题以后上传都变成0KB了?
还是出现过一次之后,上传其他的文件又是正常的?

反复试过上传出问题的这个文件没有?全部都变成0kb,还是就那么一次?
chichenzhe 2009-11-24
  • 打赏
  • 举报
回复
http://www.tctl.com.cn/accp/1490/1493/163383.html

这位兄弟遭遇和我类似.不过他结贴的时候都没有一个确切的答案和一个令人信服的理由.而是不了了之了.
chichenzhe 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 luobingxka 的回复:]
你的操作系统是什么?如果是2003,建议看下c:\WINDOWS\system32\inetsrv\metabase.xml,查找此行AspMaxRequestEntityAllowed="204800",这里限制为200K,改下这个数值试试。改此文件需要停止IIS ADMIN SERVICE服务,改好保存后再启用IIS服务。
[/Quote]

谢谢你.
给你看个连接:http://www.2yup.com/asp/article/show.asp?pid=936

除了服务器配置,在asp.net中,web.config里设置的executionTimeout="90" maxRequestLength="409600"是可以取代你所说的方式的.

所以既然我做了WEB.CONFIG的设置就不需要再设置你这个.
而我现在使用了2个月仅仅发现这一次BUG.不得不怀疑是不是什么其他问题(比如有没可能我点了2次确认按钮导致上传失败?).但又实在没有招,不清楚到底什么情况下会发生这样头疼的BUG,怎么还原这个BUG
我只相信汗水 2009-11-24
  • 打赏
  • 举报
回复
你的操作系统是什么?如果是2003,建议看下c:\WINDOWS\system32\inetsrv\metabase.xml,查找此行AspMaxRequestEntityAllowed="204800",这里限制为200K,改下这个数值试试。改此文件需要停止IIS ADMIN SERVICE服务,改好保存后再启用IIS服务。
chichenzhe 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wuyq11 的回复:]
文件什么格式,是否所有格式都这样
[/Quote]

只有txt格式. 并且昨天是200KB的文件失败了,成了0KB. 并且2个月使用以来第一次这样. 并且之前2-3M的文件都测试过.
加载更多回复(11)

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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