c# - 为什么获取上传文件的 FileByte 会破坏 StreamReader?

标签 c# asp.net asp.net-4.5

我正在处理一个项目,在该项目中,我需要比较正在上传的文件的字节表示以继续进行,并将其与可接受的文件大小进行检查。

但是,当编译器执行 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/

相关文章:

asp.net-mvc-4 - VS2012 RTM 缺少 .net 4.5 和 mvc 项目模板

c# - 从另一个ViewModel访问属性

c# - 如何将键交换为值和将值交换为字典中的键

javascript - 使用引导日期选择器进行日期验证

C# ASPX ASP.NET - 添加和删除表行

c# - 调用 File.Exist 会锁定文件吗?

c# - Redis StackExchange SortedSetAdd 不更新现有元素

asp.net - 动态向表添加行

c# - 使用 vb 返回 IEnumerable 时,Asp.net 4.5 模型绑定(bind)中断?