2009-11-12 83 views
4

我在使用asp.net中的FileUpload控件时遇到了一些麻烦。由于某些原因,每当我尝试上传文件时,文件都会显示为空白。我可以在没有任何问题的情况下保存文件 - 并且当我检查发送到页面的POST内容时,数据将被发布(我使用萤火虫来查看标题以查看是否有任何疯狂事件发生),但是控制只保存一个空文件,并声称在下面的代码中该文件的大小为-2。FileUpload控件导致空文件

有没有人知道这里会发生什么?

try 
{ 
    UploadFile.PostedFile.SaveAs(filename); 
} 
catch (Exception ex) 
{ 
    lblStatus.Text = "NOT OK - COULDN'T SAVE:" + filename + " " + ex.ToString(); 
    throw; 
} 
lblStatus.Text = "File Size: " + UploadFile.PostedFile.ContentLength.ToString(); 

注意,UploadFile.HasFile由于某种原因在这里返回false,我也得到了相同的结果我是否尝试UploadFile.SaveAs(文件名)或UploadFile.PostedFile.SaveAs(文件名)。

任何可以提供的帮助将不胜感激。

+0

您是否有正确的权限将该文件保存在服务器上? – 2009-11-12 21:06:14

+0

是的 - 我有权限 - 事实上可以写入服务器。不幸的是,FileUpload控件在检查原始文件和发布数据后没有要写入内容,这显然有数据需要写入。 (另外 - 我敢肯定,如果我没有权限写入服务器,安全异常应该导致上述代码而不是报告文件大小-2)。 – Streklin 2009-11-12 21:08:45

+0

如果你创建一个新的空白页面,并且只需要上传控件和按钮,它是否工作?这将排除页面上的其他控件干扰。 – James 2011-12-03 15:01:17

回答

0

确保您的网页上< form>元素具有这个属性/值

enctype="MULTIPART/FORM-DATA" 
+0

新的Upload控件是否默认这样做? – IrishChieftain 2009-11-12 21:31:43

4

如果你把你的UploadControl在一个UpdatePanel(阿贾克斯的东西),它不会被默认工作。

你要触发完全回发你的“提交”按钮,这样的:

<form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"/> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <Triggers> 
    <asp:PostBackTrigger ControlID="UploadFile" /> 
    </Triggers> 
    <ContentTemplate> 
    <asp:FileUpload ID="FileUpload1" runat="server" /> 
    <asp:Button ID="UploadFile" runat="server" Text="Upload" OnClick="UploadFile" /> 
    </ContentTemplate> 
    </asp:UpdatePanel> 
</form> 
+0

它不在更新面板中 - 它只是在普通的旧aspx页面上。 – Streklin 2009-11-12 21:14:00

+0

您是否尝试创建一个空白项目并在其中放入FileUpload以检查它是否可用? – 2009-11-12 21:16:52

1

你仍然面临的问题?我刚刚遇到同样的问题,在我的情况下,错误是由于使用和关闭FileUpload控件的流(Filecontrol.FileContent或FileControl.PostedFile.InputStream)而导致的,因此我得到了一个大小为0的上传文件。删除那部分代码解决了我的问题。

L.