gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:27 24 4
gpt4 key购买 nike

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com