我正在与一个项目一起工作,在该项目中,我需要比较要上传的文件的字节表示形式,然后将其与可接受的文件大小进行比较。

但是,当编译器执行byte[ ] filebyte = fileUpload.FileBytes时,StreamReader停止正常运行。

为什么会导致这种行为,并且有更好的方法来完成我要尝试的操作?

以下是该问题的样本模型。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FileUpload.aspx.cs" Inherits="TestASP.FileUpload" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajax" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
          <ajax:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></ajax:ToolkitScriptManager>
          <ajax:AsyncFileUpload  runat="server" ID="fileUpload" Width="300px" UploaderStyle="Modern"
           BackColor="LightCoral" UploadingBackColor="#CCFFFF" ThrobberID="fileLoader" />
          <asp:Button ID="btUpload" runat="server" Text="Upload" OnClick="btUpload_Clicked" />
          <br />
          <asp:Label ID="lblMessage" runat="server" ForeColor="Green"></asp:Label>
          <br />
          <asp:Label ID="lblError" runat="server" ForeColor="Red"></asp:Label>
    </div>
    </form>
</body>
</html>



protected void Page_Load(object sender, EventArgs e)
{
    Page.Form.Attributes.Add("enctype", "multipart/form-data");
}
protected void btUpload_Clicked(object sender, EventArgs e)
{
    if(fileUpload.HasFile)
    {
        byte[] fileByte = fileUpload.FileBytes;
        StreamReader sr = new StreamReader(fileUpload.FileContent);
        TextReader tr = sr;
        String fileContent = tr.ReadToEnd();
        String fileName = Path.GetFileName(fileUpload.FileName);
        this.lblMessage.Text = (fileContent);
    }
    else
    {
        this.lblError.Text = "File Not Uploaded";
    }
}

最佳答案

您应该选择一种方法,或者使用FileBytes或使用FileContent属性打开Stream。我假设FileBytes也读取Stream的内容,所以StreamReader将在末尾开始读取-因此输出为空。

如果只想检查大小,可以使用PostedFile.ContentLength属性执行此操作:

if(fileUpload.HasFile)
{
    var sizeLimit = 1024 * 1024; // Limit to a megabyte
    if (fileUpload.PostedFile.ContentLength > sizeLimit)
        lblError.Tet = "File is too large";
    else
    {
        using(StreamReader sr = new StreamReader(fileUpload.FileContent))
        {
            String fileContent = sr.ReadToEnd();
            String fileName = Path.GetFileName(fileUpload.FileName);
            this.lblMessage.Text = (fileContent);
        }
    }
}

关于c# - 为什么获取上传的文件的FileByte会破坏StreamReader?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22568170/

10-13 06:00