2015-11-02 69 views
0

我需要從服務器下載文件。該文件存儲在數據庫中。我有一個cs控制器,將文件提供給UI。服務器獲取調用看起來是這樣的:下載文件在角環境

http://server/api/controllername/fileid/data 

它的工作,當我運行在瀏覽器鏈接 - 文件下來,並進入下載區(鉻)。但是當我從我的Angualar代碼發送相同的命令時,我沒有看到任何文件。控制檯報告我的請求成功(代碼200),但我什麼也沒看到。請讓我知道要發佈哪些代碼片段,以便於幫助。

感謝

+2

不要請求以http,而不是要求它,如果你要離開的頁面訪問該網址,無論是在當前標籤頁或一個新標籤,甚至一個iframe。 –

+0

如果你發送一個AJAX請求,你基本上是告訴瀏覽器:我想處理該請求的響應我想要的方式,用JavaScript代碼。爲什麼您發送AJAX請求而不是讓用戶點擊常規鏈接? –

+0

它是什麼樣的數據? JSON,XML還是它的頁面片段(HTML)? – Chris

回答

1

創建一個鏈接到資源,並且不使用Ajax處理。

如果您鏈接在新標籤中打開,該標籤將它實現後,這是剛剛打開下載在大多數現代瀏覽器文件自動關閉。

1

試試這個代碼:

var a = document.createElement('a'); 
a.href = "http://server/api/controllername/fileid/data"; 
a.click(); 

您可以撰寫地址串聯變量和文本。

+2

爲什麼不簡單地使用'window.location ='http:// server/api/controllername/fileid/data''? –

+0

我在創建XML文件的網頁中使用該代碼並讓它在本地保存。如果我使用你的建議,我的瀏覽器(鉻)顯示XML文件,當我使用我上面描述的那個時,它會自動下載文件。我不知道這是否會影響其他文件或MIME類型。 –

1

文件可能正確下載來調用它,但將是無用的用戶一個byte [] - 因爲是我的問題。

在我來說,我需要下載一個文件,一組複雜的參數。這個例子中的JavaScript使用一個post請求,並用你給它的任何JavaScript對象創建一個表單(並將其張貼)。此代碼可以幫助您解決簡化它:

private open(verb, url, data, target) 
 
    { 
 
     var form = document.createElement("form"); 
 
     form.action = url; 
 
     form.method = verb; 
 
     form.target = target || "_self"; 
 
     if (data) { 
 
      this.createFormParameters(form, "", data); 
 
     } 
 

 
     form.style.display = 'none'; 
 
     document.body.appendChild(form); 
 
     form.submit(); 
 
    } 
 

 

 
    private createFormParameters(form, key, value) { 
 
     // recursive algorithm to add parameters (including objects and arrays of objects) to a custom form 
 

 
     if (typeof value === "object") { 
 
      for (var item in value) { 
 

 
       if (Array.isArray(value[item])) { 
 
        for (var arrayItem in value[item]) { 
 
         this.createFormParameters(form, (item + "[" + arrayItem + "]."), value[item][arrayItem]); 
 
        } 
 
        continue; 
 
       } 
 

 
       var input = document.createElement("textarea"); 
 
       input.name = key + item; 
 
       input.value = value[item]; 
 
       form.appendChild(input); 
 
      } 
 
     } 
 
     else 
 
     { 
 
      var input = document.createElement("textarea"); 
 
      input.name = key; 
 
      input.value = value; 
 
      form.appendChild(input); 
 
     } 
 
    }