[英]ASP.NET C# File Access
我的“ ImageDemo ”應用程序的架構
技術:ASP.NET 語言:C#
以前的架構: asp.net 頁面存儲在網絡服務器中。 Web 服務器中存在一個名為ImageRepository的文件夾。 我確實將圖像(由用戶瀏覽、選擇和存儲)存儲在ImageRepository中。 我可以訪問存儲在ImageRepository中的圖像的所有屬性和內容。 我曾經使用 ASP.NET 的圖像控制來顯示圖像。
新架構:我沒有將圖像存儲在網絡服務器的文件夾中,而是使用以下憑據設置了一個專用的文件服務器(比如說)
用戶名:my_name
密碼:wXy12Apl
我可以登錄系統,訪問存儲圖像的文件夾,讀取文件的所有屬性。 然后我將文件名添加到下拉列表中,所以它看起來像這樣
因此,在onselectedindexchanged事件中,我嘗試使用 ASP.NET 的圖像控制來顯示圖像。 但我不能。 會有什么問題? 我可以訪問文件的所有屬性,但無法讀取圖像的內容。
例如; 當我 select 第一個圖像時,控制看起來像
當我 select 第二張圖片時,控制看起來像
您可能沒有該文件的權限。 您可以像@Smudge202 建議的那樣做並應用正確的權限,或者您可以在不同的上下文中運行部分代碼。 請參閱此代碼以模擬用戶: http://www.codeproject.com/KB/cs/zetaimpersonator.aspx
瀏覽器/最終用戶無權訪問文件服務器。 您可以實施幾個快速解決方案:
1) 為最終用戶添加從新文件共享讀取的權限 - 如果您的站點是內部站點(僅在 LAN 上),那么這可能是最好的解決方案。 如果網站暴露在互聯網上,這可能不是最安全的解決方案。
2) 創建一個簡單的 web 服務(WCF 或 ASMX)。 確保服務可以從新共享中讀取,並讓服務將內容作為 Web 響應返回。
這是后者的一個(幾乎完整的)示例,一段舊代碼響應舊式 asp.net 處理程序(ashx),它實現了IHttpHandler - 我建議個人使用 WCF:
Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
_Context = context
_Context.Response.Clear()
_Context.Response.ContentType = "image/jpg"
If ImageParameter IsNot Nothing Then
Dim imageData As Byte() = Nothing
If String.IsNullOrEmpty(ImageParameter.CompressedFileStorageLocation) Then
Return
End If
Dim imagePath As String = String.Format("{0}{1}", CS_IMAGE_REPOSITORY_BASE_PATH, ImageParameter.CompressedFileStorageLocation)
Try
If IO.File.Exists(imagePath) Then
Using s As FileStream = New FileStream(imagePath, FileMode.Open)
ReDim imageData(s.Length)
Dim bytesRead As Integer = s.Read(imageData, 0, s.Length)
s.Close()
End Using
End If
Catch ex As Exception
Debug.Print(ex.Message)
End Try
_Context.Response.OutputStream.Write(imageData, 0, imageData.Length)
End If
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.