私はvb.netを使用してasp.net webforms Webサイトを開発しています。リンクとしてグリッドビューに表示されるファイルのリストでは、リンク上でクリックすると、OpenFileメソッドが呼び出されます。ウェブ上で見つけたこのコードは、Webサーバーに保存されているファイルをクライアントにダウンロードするために使用されていますが、これは正常に動作しますが、.docxファイルや.xlsxファイルをダウンロードしようとすると、 という行に"Response.BinaryWrite(btFile)"
というエラーが発生しますが、は、。下記の実際のコードのshortendバージョンであるResponse.BinaryWrite()のSystem.ArgumentOutOfRangeException
ページコード:
Protected Sub grvItemAttachments_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grvItemAttachments.RowCommand
Try
If e.CommandName = "Open" Then
FileOpener.OpenFile(fileNameWithPath)
End If
Catch ex As Exception
ErrHandler.WriteError(ex.Message)
End Try
End Sub
ファイルオープナーコード:
Public Shared Sub OpenFile(fileNameWithPath as string)
Dim file As New FileInfo(fileNameWithPath)
Dim fs As System.IO.FileStream = Nothing
fs = System.IO.File.Open(fileNameWithPath, System.IO.FileMode.Open)
Dim btFile As Byte() = New Byte(fs.Length - 1) {}
fs.Read(btFile, 0, Convert.ToInt32(fs.Length))
fs.Close()
Response.AddHeader("Content-disposition", "attachment; filename=" & FileName)
Response.ContentType = GetFileType(file.Extension.ToLower())
Response.BinaryWrite(btFile)
Response.End()
End Sub
エラーメッセージ:
System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values." & vbCrLf & "Parameter name: offset" & vbCrLf & " at System.Web.HttpResponseStream.Write(Byte[] buffer, Int32 offset, Int32 count)" & vbCrLf & " at System.Web.HttpResponse.BinaryWrite(Byte[] buffer)" & vbCrLf & " at FileOpener.OpenFile(String FileName, String FolderName) in D:\Projects\VSS Projects\PIL WebSite\App_Code\Common\FileOpener.vb:line 25" & vbCrLf & " at Web_RTOView.grvItemAttachments_RowCommand(Object sender, GridViewCommandEventArgs e) in D:\Projects\VSS Projects\PIL WebSite\Web\RTOView.aspx.vb:line 310}
------
grvItemAttachments_RowCommand
Error Message: Specified argument was out of the range of valid values.
Parameter name: offset
任意のアイデアどのようにこの問題を解決するには問題?
です。問題が解決しました。 – Nalaka526