iT邦幫忙

1

c# 瀏覽 PDF問題

  • 分享至 

  • xImage

我希望透過網頁直接讀取我資料夾的pdf開新視窗呈現

<a href="file://///D:/kill/test.pdf" target="_blank">點擊這裡打開 PDF</a>

在Chrome 會出現 Not allowed to load local resource: 錯誤訊息

應該是安全政策的關係

目前想法是把 資料夾上到IIS變成虛擬資料夾再連線

想請問還有更好的方法嗎?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
緯大啊緯大人
iT邦研究生 1 級 ‧ 2023-08-16 18:06:50
最佳解答
  1. 放應用程式路徑底下
  2. 放其他硬碟其他位置下,但要在程式設置好路徑

程式設好路徑是

path: \192.168.0.1\kill\test.pdf
這種嗎?

  1. 放在你應用程式路徑底下
    你的專案資料夾應該有個wwwroot
    這裡面新增你要的資料夾kill再放入pdf
    這樣你可以使用以下
<a href="~/kill/test.pdf" target="_blank">點擊這裡打開 PDF</a>

2.放其他硬碟其他位置下,但要在程式設置好路徑

一般來說,我們會提供使用者上傳檔案,上傳檔案通常會另外放,不會放在應用程式路徑底下,這時就會設置別的路徑

可能設在D:\WebData\PDF

那我們通常會使用appsetting.json去設定這個路徑,因為可以依照你的版本(開發階段、master)去設置

例如

//appsetting.json
"FilePath": {
    "PhysicalPath": "D:\\WebData\\PDF" 
  }  

然後你是mvc
可以新增一個action去執行你要的讀取動作

例如

後端

//我假設這是killController

 public IActionResult GetPDF()
        {        
 //這個就是讀取上方appsetting的設置,你想寫死也可以直接寫死你要的路徑
            var filePath = Path.Combine(_configuration["FilePath:PhysicalPath"], "kill", "test.pdf");
 //路徑串起來為D:\\WebData\\PDF\\kill\\test.pdf
            
            var contentType = "application/pdf";
           
            byte[] b = System.IO.File.ReadAllBytes(filePath);
           
            return File(b, contentType);
        }

前端則可以


<a href="/kill/GetPDF" target="_blank">點擊這裡打開 PDF</a>

0
PinShengs
iT邦新手 5 級 ‧ 2023-08-15 23:10:56

不需要虛擬資料夾,兩個方式提供你做選擇

  1. 檔案放置程式目錄底下,用相對路徑
  2. 讀PDF檔案,變成base64給畫面做顯示
0
淺水員
iT邦大師 6 級 ‧ 2023-08-16 12:59:45

file://///D:/kill/test.pdf
是 C# 自動抓資料夾產生的嗎?
這是不是代表有 server 的環境?
如果是如此,可以寫一套 API 讓網頁跟這組 API 溝通

PS. 可以的話,請把背景寫清楚一些,其他人才不用猜測你想做什麼。例如有沒有伺服器的環境,PDF 是長時間固定不變的還是會頻繁變動。更新 pdf 之後,後台是否要做什麼樣的操作,瀏覽器才會收到更新後檔案的列表。

我要發表回答

立即登入回答