我正在与一个项目一起工作,在该项目中,我需要比较要上传的文件的字节表示形式,然后将其与可接受的文件大小进行比较。
但是,当编译器执行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/