none
請問HttpContext.Current.Request.MapPath與linkbutton 跟fileupload搭配使用問題 RRS feed

  • 問題

  • 請問各位大大,我在使用HttpContext.Current.Request.MapPath跟linkbutton時,會沒反應,HttpContext.Current.Request.MapPath與fileupload搭配會出現檔案上傳失敗,拒絕存取路徑!的錯誤,接著使用瀏覽器開發人員工具檢查時,把滑鼠移到失敗的href上時發現,我所要的路徑前面都匯多加一串網址,例如:http://192.167.0.323/asdf/C:\asdf\data\ExcelFiles\......,這樣錯誤的網址,請問如何解決,程式碼如下:

    設計

    linkbutton     fileupload1與butimp

                              匯入Excel                            
                         <asp:FileUpload ID="FileUpload1" runat="server" CssClass="form-control form-control-400 " />                            
                        <asp:Button runat="server" Text="xxxx" style="width:120px" ID="ButImp" CssClass="btn btn-sm btn-success" />
                         <asp:HyperLink ID="LnkExcel" runat="server" style="width:120px"  CssClass="btn ok">xxxxExcel</asp:HyperLink>

    linkbutton

            Dim uploadPath As String = HttpContext.Current.Request.MapPath("~/data/ExcelFiles/")
            LnkExcel.NavigateUrl = uploadPath & "xxxxxxExcel.xlsx"
            LnkExcel.Target = "_new"

    fileupload1與butimp

     

    Protected Sub ButImp_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButImp.Click

    ...

    Dim uploadPath As String = HttpContext.Current.Request.MapPath("~/data/ExcelFiles/") Dim saveFile As String = uploadPath & Format$(Now, "yyyy-MM-dd-HH-mm-ss") & FileUpload1.FileName Try FileUpload1.PostedFile.SaveAs(saveFile) Catch ex As Exception TycFunction.MsgAlert(Page, "檔案上傳失敗! " & ex.Message) Exit Sub End Try

    ...

    End Sub

    請問如何讓網址呈現正確,謝謝各位大大!

    2017年12月26日 上午 06:17

解答

  • 你頁面上顯示應該不需要用 MapPath 

    MapMath 是抓專案中的目錄。

    你改成下面試試看

            Dim uploadPath As String = "~/data/ExcelFiles/"
            LnkExcel.NavigateUrl = uploadPath & "xxxxxxExcel.xlsx"
            LnkExcel.Target = "_new

    • 已標示為解答 Eden Knight 2018年1月2日 上午 06:05
    2017年12月26日 上午 07:53
  • 這一行:

    HttpContext.Current.Request.MapPath("~/data/ExcelFiles/")

    可以寫成:

    Server.MapPath("~/data/ExcelFiles/")

    這一行:

    Dim saveFile As String = uploadPath & Format$(Now, "yyyy-MM-dd-HH-mm-ss") & FileUpload1.FileName
                    Try

    可以改成:

    Dim saveFile As String = uploadPath & Format$(Now, "yyyy-MM-dd-HH-mm-ss") & Path.GetFileFileUpload1.FileName
    

    另外要注意加入的日期時間和檔案名稱之間是否有目錄分隔字元

    • 已標示為解答 Eden Knight 2018年1月2日 上午 06:05
    • 已取消標示為解答 Eden Knight 2018年1月2日 上午 06:06
    • 已標示為解答 Eden Knight 2018年1月2日 上午 06:06
    2017年12月27日 上午 12:46
  • 目前已成功 程式碼如下:

    linkbutton

            Dim uploadPath As String = "~/data/ExcelFiles/"
            LnkExcel.NavigateUrl = uploadPath & "xxxxxExcel.xlsx"
            LnkExcel.Target = "_new"

    fileupload1與butimp

     Protected Sub ButImp_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButImp.Click
    ...
    Dim uploadPath As String = HttpContext.Current.Request.MapPath("~/data/ExcelFiles/")
                        Dim saveFile As String = uploadPath & "\" & Format$(Now, "yyyy-MM-dd-HH-mm-ss") & FileUpload1.FileName
                        Try
                            FileUpload1.PostedFile.SaveAs(saveFile)
                        Catch ex As Exception
                            TycFunction.MsgAlert(Page, "檔案上傳失敗! " & ex.Message)
                            Exit Sub
                        End Try
    ...
     End Sub

    謝謝各位大大

    • 已標示為解答 Eden Knight 2018年3月9日 上午 02:12
    2018年1月2日 上午 06:05

所有回覆

  • 你頁面上顯示應該不需要用 MapPath 

    MapMath 是抓專案中的目錄。

    你改成下面試試看

            Dim uploadPath As String = "~/data/ExcelFiles/"
            LnkExcel.NavigateUrl = uploadPath & "xxxxxxExcel.xlsx"
            LnkExcel.Target = "_new

    • 已標示為解答 Eden Knight 2018年1月2日 上午 06:05
    2017年12月26日 上午 07:53
  • 這一行:

    HttpContext.Current.Request.MapPath("~/data/ExcelFiles/")

    可以寫成:

    Server.MapPath("~/data/ExcelFiles/")

    這一行:

    Dim saveFile As String = uploadPath & Format$(Now, "yyyy-MM-dd-HH-mm-ss") & FileUpload1.FileName
                    Try

    可以改成:

    Dim saveFile As String = uploadPath & Format$(Now, "yyyy-MM-dd-HH-mm-ss") & Path.GetFileFileUpload1.FileName
    

    另外要注意加入的日期時間和檔案名稱之間是否有目錄分隔字元

    • 已標示為解答 Eden Knight 2018年1月2日 上午 06:05
    • 已取消標示為解答 Eden Knight 2018年1月2日 上午 06:06
    • 已標示為解答 Eden Knight 2018年1月2日 上午 06:06
    2017年12月27日 上午 12:46
  • 目前已成功 程式碼如下:

    linkbutton

            Dim uploadPath As String = "~/data/ExcelFiles/"
            LnkExcel.NavigateUrl = uploadPath & "xxxxxExcel.xlsx"
            LnkExcel.Target = "_new"

    fileupload1與butimp

     Protected Sub ButImp_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButImp.Click
    ...
    Dim uploadPath As String = HttpContext.Current.Request.MapPath("~/data/ExcelFiles/")
                        Dim saveFile As String = uploadPath & "\" & Format$(Now, "yyyy-MM-dd-HH-mm-ss") & FileUpload1.FileName
                        Try
                            FileUpload1.PostedFile.SaveAs(saveFile)
                        Catch ex As Exception
                            TycFunction.MsgAlert(Page, "檔案上傳失敗! " & ex.Message)
                            Exit Sub
                        End Try
    ...
     End Sub

    謝謝各位大大

    • 已標示為解答 Eden Knight 2018年3月9日 上午 02:12
    2018年1月2日 上午 06:05