快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

澳门星际手机版官方下载:Response.WriteFile无法下载大文件



当您考试测验应用 response.writefile 措施下载大年夜文件时,下载操作可能没有相应,并且随后可能会收到以下差错信息之一:

The page cannot be displayed- 或 -

Server Application Unavailable

The Web application you are attempting to access on this Web server is currently unavailable.Please hit the "Refresh" button in your Web browser to retry your request.

Administrator Note:An error message detailing the cause of this specific request failure can be found in the system event log of the web server.Please review this log entry to discover what caused this error to occur.您还可能会在利用法度榜样事故日志中看到以下消息:

Aspnet_wp.exe(对付在 Microsoft Internet 信息办事 [IIS] 6.0 上运行的利用法度榜样,则为 W3wp.exe)意外竣事。

在此历程中,您还可能会发明 Web 办事器的内存应用量增添。

回到顶端

缘故原由

Web 办事器谋略机的硬件设置设置设备摆设摆设抉择您可以成功下载的最大年夜文件大年夜小。当 ASP.NET 帮助进程(Aspnet_wp.exe,对付在 Internet 信息办事 6.0 [IIS] 上运行的利用法度榜样,则为 W3wp.exe)履行文件下载哀求时,会呈现文件下载对话框。ASP.NET 帮助进程开始向 Microsoft Internet 信息办事进程(Inetinfo.exe 或 Dllhost.exe)发送数据。它不等您单击“确定”即开始发送。

根据谋略机的设置设置设备摆设摆设,IIS 进程可能会处置惩罚数澳门星际手机版官方下载据,也可能会将数据缓存在内存中。假如文件太大年夜,在这两个进程互相通信的历程中,数据将被缓存在内存中。这可能会导致办事器上的内存应用量增添。呈现此差错的缘故原由是 Web 办事器上的内存限定。

回到顶端

替代措施

要办理此问题,请应用以下任一措施: 将数据分成较小的部分,然后将其移动到输出流以供下载,从而获取这些数据。以下代码演示了若何完成此操作。

紧张阐明:当您在 ASP.NET 利用法度榜样的 Web.config 文件中将编译元素的 debug 属性值设置为 false 时,必须针对要下载的文件大年夜小将 server.scripttimeout 属性设置为适当的值。默认环境下,server.scripttimeout 值被设置为 90 秒。然则,当 debug 属性被设置为 true 时,server.scripttimeout 值将被设置为一个异常大年夜的值(30,000,000 秒)。作为一名开拓职员,您必须知道这可能会对您的 ASP.NET Web 利用法度榜样的行径造成的影响。

此外,鄙人面的代码中,您还必须知道与 filestream 构造函数一路应用的参数值。指定的罗列值会对供给的功能孕育发生重大年夜影响。有关更多信息,请参考 参考 一节中的 fi澳门星际手机版官方下载lestream 链接。

visual Basic .NET 代码

Dim iStream As System.IO.Stream

' Buffer to read 10K bytes in chunk:

Dim buffer(10000) As Byte

' Length of the file澳门星际手机版官方下载:

Dim length As Integer

' Total bytes to read:

Dim dataToRead As Long

' Identify the file to download including its path.

Dim filepath As String = "DownloadFileName"

' Identify the file name.

Dim filename As String = System.IO.Path.GetFileName(filepath)

Try

' Open the file.

iStream = New System.IO.FileStream(filepath, System.IO.FileMode.Open, _

IO.FileAccess.Read, IO.FileShare.Read)

' Total bytes to read:

dataToRead = iStream.Length

Response.ContentType = "application/octet-stream"

Response.AddHeader("Content-Disposition", "attachment; filename=" & filename)

' Read the bytes.

While dataToRead > 0

' Verify that the client is connected.

If Response.IsClientConnected Then

' Read the data in buffer

length = iStream.Read(buffer, 0, 10000)

' Write the data to the current output stream.

Response.OutputStream.Write(buffer, 0, length)

' Flush the data to the HTML output.

Response.Flush()

ReDim buffer(10000) ' Clear the buffer

dataToRead = dataToRead - length

Else

'prevent infinite loop if user disconnects

dataToRead = -1

End If

End While

Catch ex As Exception

' Trap the error, if any.

Response.Write("Error : " & ex.Message)

Finally

If IsNothing(iStream) = False Then

' Close the file.

iStream.Close()

End If

End Try

Visual C# .NET 代码

System.IO.Stream iStream = null;

// Buffer to read 10K bytes in chunk:

byte[] buffer = new Byte[10000];

// Length of the file:

int length;

// Total bytes to read:

long dataToRead;

// Identify the file to download including its path.

string filepath= "DownloadFileName";

// Identify the file name.

stringfilename= System.IO.Path.GetFileName(filepath);

try

{

// Open the file.

iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,

System.IO.FileAccess.Read,System.IO.FileShare.Read);

// Total bytes to read:

dataToRead = iStream.Length;

Response.ContentType = "application/octet-stream";

Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

// Read the bytes.

while (dataToRead > 0)

{

// Verify that the client is connected.

if (Response.IsClientConnected)

{

// Read the data in buffer.

length = iStream.Read(buffer, 0, 10000);

// Write the data to the current output stream.

Response.OutputStream.Write(buffer, 0, length);

// Flush the data to the HTML output.

Response.Flush();

buffer= new Byte[10000];

dataToRead = dataToRead - length;

}

else

{

//prevent infinite loop if user disconnects

dataToRead = -1;

}

}

}

catch (Exception ex)

{

// Trap the error, if any.

Response.Write("Error : " + ex.Message);

}

finally

{

if (iStream != null)

{

//Close the file.

iStream.Close();

}

}

将 DownloadFileName 调换为大年夜于 100 MB 的文件的名称。

- 或 -

为用户供给用于下载文件的链接。

- 或 -

应用 Microsoft ASP 3.0 进行下载或者与 ASP 一路应用 Software Artisans FileUp。

- 或 -

创建 ISAPI 扩展以下载文件。

- 或 -

应用 FTP 下载文件。

回到顶端

状态

这种征象是设计导致的。

回到顶端

更多信息

重现此问题的步骤

1.

在 Microsoft Visual Basic .NET 或 Microsoft Visual C# .NET 中,新建一个 Web 利用法度榜样项目。默认环境下,将创建 WebForm1.aspx。

2.

将一个按钮工具从对象箱拖到 WebForm1.aspx。

3.

双击该按钮工具以便在代码视图中打开 click 事故。

4.

将以下代码粘贴到 Button1 click 事故中。

visual Basic .NET 代码

' Identify the file to download including its path.

Dim filepath As String = DownloadFileName

' Identify the file name.

Dim filename As String = System.IO.Path.GetFileName(filepath)

Response.Clear()

' Specify the Type of the downloadable file.

Response.ContentType = "application/o澳门星际手机版官方下载ctet-stream"

' Set the Default file name in the FileDownload dialog box.

Response.AddHeader("Content-Disposition", "attachment; filename=""" & filename & """")

Response.Flush()

' Download the file.

Response.WriteFile(filepath)

Visual C# .NET 代码

// Identify the file to download including its path.

string filepath = DownloadFileName;

// Identify the file name.

string filename = System.IO.Path.GetFileName(filepath);

Response.Clear();

// Specify the Type of the downloadable file.

Response.ContentType = "application/octet-stream";

// Set the Default file name in the FileDownload dialog box.

Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

Response.Flush();

// Download the file.

Response.WriteFile(澳门星际手机版官方下载filepath);

5.

将 DownloadFileName 调换为大年夜于 100 MB 的文件的名称。

6.

在“调试”菜单上,单击“开始”。

7.

单击“Button1”

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: