none
使用Session傳送User上傳圖片之檔案問題 RRS feed

  • 問題

  • 我使用Session傳送User上傳圖片之檔案,程式如下:

      Dim file As HttpPostedFile = fileupload1.PostedFile
      Me.Session("UploadFile") = file
      Me.fileupload1.Visible = False
      Me.IMG1.Visible = True
      Me.IMG1.Src = "ShowPic.ashx"
      Me.IMG1.Alt = "(" & file.ContentLength & ")"

    再利用ShowPic.ashx程式接收該Session並顯示該圖片,程式如下:

     If Not context.Session("UploadFile") Is Nothing Then
        Dim file As HttpPostedFile = context.Session("UploadFile")
        Dim fbin(file.ContentLength) As Byte
        file.InputStream.Position = 0
        file.InputStream.Read(fbin, 0, file.InputStream.Length)
        context.Response.AddHeader("Content-Disposition", "attachment;filename=" &      file.FileName.Substring(file.FileName.LastIndexOf("\") + 1))
        context.Response.ContentType = file.ContentType
        context.Response.BinaryWrite(fbin)
     End If
     context.Response.End()

    問題是:
    file.ContentLength 大於 80KB 該"image"就顯示不出來 (小於或等於80KB就可以) ,
    不過用VS2005 "Debug Mode"時該
    "image"(大於80KB甚至2-3MB可顯示.
    不知各位前輩有遇過此問題嗎? 要如何才能fix it. 謝謝!

    PS: SERVER_SOFTWARE: IIS/5.1 (ASP.NET 2.0 Framework) Windows XP Pro.


    2007年12月10日 下午 04:45

解答

  • 我終於找到答案了, 原來在Web.config要加:

    程式碼區塊

    <httpRuntime maxRequestLength="8192" requestLengthDiskThreshold="8192" />


    requestLengthDiskThreshold預設是 80KB, 所以檔案大於80KB就會Exception異常, 圖片就顯示不出來了.

    且maxRequestLength必須大於或等於requestLengthDiskThreshold的值.(8192=8MB)

    謝謝兩位前輩的回覆, 以上淺見供大家交流.
    2007年12月11日 下午 06:19

所有回覆

  • HI,

     

    請問您有沒有令ashx的類別實作IRequiresSessionState? 這樣才能在ashx中使用Session, 我用您的程式, upload1~2MB的圖檔是沒有問題的

     

    tihs

    2007年12月11日 上午 01:08
  • 在 HttpHandler 中如果要使用 Session,必須實作 IReadOnlySessionState (唯讀) 或 IRequiresSessionState (讀寫) 介面,然後再透過 context.Session 來存取 Session。參考:http://teacher.allok.com.tw/viewtopic.mspx?t=4295

     

    不過我覺得在 Generic Handler 應該可以直接用 Session 才對!(但我沒試過)


    ----
    From: Will
    Blog: http://blog.miniasp.com/
    記載著 Will 在網路世界的學習心得與技術分享

    2007年12月11日 上午 04:19
  • 我終於找到答案了, 原來在Web.config要加:

    程式碼區塊

    <httpRuntime maxRequestLength="8192" requestLengthDiskThreshold="8192" />


    requestLengthDiskThreshold預設是 80KB, 所以檔案大於80KB就會Exception異常, 圖片就顯示不出來了.

    且maxRequestLength必須大於或等於requestLengthDiskThreshold的值.(8192=8MB)

    謝謝兩位前輩的回覆, 以上淺見供大家交流.
    2007年12月11日 下午 06:19