2012-02-09 75 views
0

我有一個Web應用程序(ASP.NET/C#),我需要通過雙擊表格行從服務器端下載pdf文件到客戶端。從外部Web服務下載帶有JQuery/JSON的pdf文件

我的想法是使用JQuery/Ajax調用Web服務。 Web服務調用另一個Web服務(由外部合作伙伴提供),以byte []形式返回PDF文件(只是這種格式)。
我已經讀過幾種可能性,幾乎所有情況下文件都保存在服務器上,然後通過HTTPContaxt.Current.Response返回給客戶端。在其他情況下,URL被提供給客戶端,然後客戶端被重定向到具有這樣的URL的隱藏的iFrame。

將PDF文件發送給客戶端的最佳方法是什麼,以便她/她可以在本地打開或保存它? 謝謝。

回答

1

一般我簡單地調用一個外部頁面,用一個簡單的javascirpt windows.open(「GetAttach.ashx?ID = 5」) ,然後,在該處理程序中,代碼返回的PDF字節數組將是

byte[] allegato = GetPdfFromExternalSources; 
response.ContentType = System.Net.Mime.MediaTypeNames.Application.Pdf; 
response.AppendHeader("content-disposition", string.Format("attachment; filename=\"{0}\"", filename)); 
response.BufferOutput = false; //Stream the content to the client, no need to cache entire streams in memory... 
response.BinaryWrite(allegato); 
response.Close(); 
+0

我也會得到同樣的解決方案。由於文件可能足夠「重」,可以引入任何文件來提高性能? – Francesco 2012-02-09 16:04:46

0

我會選擇以下方法:

  1. 客戶點擊了指向包含所請求的PDF格式的ID的URL 表中的鏈接(如下載ID = 3?)
  2. 上服務器端向第三方發送請求,然後以字節的形式直接返回給用戶。您還應該添加 適當的標題,如果你想強制瀏覽器提示 打開/保存對話框,並且不會打開該文件自動2.

如果請求的PDF文件較大或有對同一PDF文件的許多要求,您可以在服務器上實現一個最小緩存系統,並將文件保存在那裏供將來使用。

+0

其實pdf文件可能在2KB到90MB之間變化。 – Francesco 2012-02-09 16:02:19