2011-03-31 61 views
2

大家好我有工作在我的測試解決方案可愛的更新面板,但是當我把它變成主要的項目也不能正常工作。 我已經說得很簡單,但仍然沒有喜悅,它包括:Asp.net FileUpload問題「算術運算導致溢出。」的ContentLength總是-2

  1. 文件上傳控件
  2. 鏈接按鈕

鏈接按鈕有一個onclick方法,它採用了文件並創建一個字節數組。由於某種原因,contentLength每次都是-2。不管我使用什麼類型的文件。每次! 考慮到它在我的測試解決方案中正常工作,這是非常令人沮喪的。

有什麼我失蹤或者應該看什麼?

謝謝:)

編輯:

我使用VS2008

CODE:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
</head> 
<body> 
    <form id="form1" runat="server">  
     <asp:FileUpload ID="FileUpload1" runat="server" /> 
     <asp:LinkButton ID="btnUpload" runat="server" ValidationGroup="uploadform" CssClass="uploadbutton" OnClick="btnUpload_Click">Upload</asp:LinkButton>  
    </form> 
</body> 
</html> 

C#

protected void btnUpload_Click(object sender, EventArgs e) 
{ 
    var intDoccumentLength = FileUpload1.PostedFile.ContentLength; 

    // will crash here as content length is -2 for some reason~??? 
    byte[] newDocument = new byte[intDoccumentLength]; 
} 
+0

爲什麼不把上傳的文件保存到磁盤? – Predator 2011-03-31 16:35:50

+0

由於不規範 – Funky 2011-04-01 07:25:08

+1

您正在使用一個UpdatePanel多數民衆贊成?你在你的問題中提到它,但是我在你發佈的代碼中看不到它。 – 2011-04-01 08:11:23

回答

0

由於FileUpload.PostedFile.InputStream.Length回覆原來一樣FileUpload.PostedFile.ContentLength,你檢查你的文件的大小超過了maxRequestLength(默認爲4MB)低於或指定在web.config中:

<system.web> 
    <httpRuntime maxRequestLength="8192"/> 
</system.web> 

參見:http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.maxrequestlength.aspx

+0

謝謝,但它返回完全相同的錯誤 – Funky 2011-04-01 08:39:27

+0

它目前設置爲:40960,我剛剛嘗試上傳4.71 KB大小JPG,仍然有相同的錯誤 – Funky 2011-04-01 08:48:47

1

你的測試代碼必須做完整的回發,而不是Updatepanel部分作爲主項目的一部分。使用updatepanel,當您檢查其contentlenght時,文件可能尚未上載;對於文件總是首先上傳的完整回發,這不是真的。在這種情況下,它總是會通過你一個錯誤。這隻能使用某種ActiveX控件來完成。

這篇文章可能會給你不錯的提示和方向:asp.net FileUpload event after choice is made and before submit for upload

-1

試試這個

BinaryReader b = new BinaryReader(file.InputStream); 
byte[] binData = b.ReadBytes(file.InputStream.Length); 

這裏的文件是HttpPsotedFile對象。 HttpPostedFile Class。此外,如果使用更新面板,請參閱控制上傳發生的回發參考。沒有回傳,你需要關注AJAX。

+0

嗨,這是路易斯提出的相同的解決方案。問題是輸入流是空的每次 – Funky 2011-04-18 08:01:31

1

文件了裝載機並非如此,如果你正在使用更新面板在更新面板運作良好,那麼你必須使用觸發器在更新面板,你必須給控制或按鈕的名稱上你點擊上傳文件

<%@ Page Language="C#" MasterPageFile="~/FullViewMasterPage.master" AutoEventWireup="true" CodeFile="Test1.aspx.cs" Inherits="Test1" Title="Untitled Page" %> 
<%@ Register TagPrefix="yaf" Namespace="YAF" Assembly="YAF" %> 
<%@ Register TagPrefix="yc" Namespace="YAF.Controls" Assembly="YAF" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="FullViewContentPlaceHolder" Runat="Server"> 


    <form id="form1" runat="server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server" /> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 

<ContentTemplate> 
<asp:FileUpload id="fileUpload" runat="server" ></asp:FileUpload> 
<asp:Button ID="Upload" runat="server" OnClick="Upload_Click" Text="Upload The Image" /><br /> 
</ContentTemplate> 
</asp:UpdatePanel> 
<br /> 

<Triggers> 
<asp:AsyncPostBackTrigger ControlID="Upload" EventName="Upload_Click" /> 
</Triggers> 

<asp:UpdatePanel ID="UpdatePanel2" runat="server"> 

<ContentTemplate> 
<asp:Label ID="lblTime3" runat="server" /><br /> 
</ContentTemplate> 
</asp:UpdatePanel> 
</form> 

</asp:Content> 
<code> 
相關問題