2016-07-19 49 views
0

我正在尋找在運行中創建文件並在GRAILS應用程序中向用戶提供下載鏈接。 我遵循here的方法。我沒有錯誤,但它似乎沒有工作。這是我的控制器代碼。Grails應用程序中的文件下載功能

`渲染(文件:pptFile,文件名: 'someppt.pptx',則contentType: '應用/八位字節流')

客戶端代碼使得AJAX調用從服務器檢索該文件。它不會導致服務器強制在客戶端(瀏覽器)上下載文件。這是客戶端代碼。

$.ajax({ 
type : 'POST', 
url : '<<URL>>', 
success: function(result) { 
var uri = 'data:application/octet-stream;charset=UTF-8,' + 
encodeURIComponent(result); 
window.open(uri, 'somePPT.pptx'); 
}, 
failure: function(){ 
alert ('failure') 
} 
}); 

回答

0

好的。所以我終於得到了這個工作。正如@railsdog和其他人提出的一樣(這個問題已經在stackoverflow中的其他線程上討論過,但我的具體情況與這些有些不同),我最終直接從服務器寫入響應並取出了AJAX調用。我進行AJAX調用的唯一原因是我不想提交具有「生成文件」功能的當前頁面(頁面上有很多數據元素,我不想僅僅重新整個頁面用於下載文件)。所以我最終使用了一個目標爲「_blank」的錨標籤。這裏的代碼片段

<a href="myControllerMethodToGenerateFileAndWriteToHTTPResponseDirectlyAsSuggestedByOthersInThisPost" 
target="_blank"/> 

這實際上打開了一個新的頁面,並做了提交以啓動下載。問題解決了。它在CHROME中運行良好。 :) 多謝你們!

2

也許一個類似於此(意譯,而是用於下載一個JSON文件):

def someControllerMethod() { 
    def dlContent = someService.marshalJson() 
    def contentType = "application/octet-stream" 
    def filename = "someFilename.json" 
    response.setHeader("Content-Disposition", "attachment;filename=${filename}") 
    render(contentType: contentType, text: dlContent as JSON) 
} 
+0

請問您可以添加一些關於如何將文件轉換爲JSON的更多細節?我正在生成一個PPTX及其一個java.io.File。另外,我正在對服務器進行AJAX調用以便即時生成文件,並且希望將該文件提供給客戶端進行下載。我需要強制瀏覽器打開下載提示。 – JavaProgrammer

0

我使用的渲染方法從@railsdog喜歡的解決方案!

這是我迄今使用

稍微另一種方法是:

def controllerMethod() { 
    ... 
    File file = sepaXmlService.createTransfersFile(...) 

    response.setContentType("application/xml") 
    response.setHeader("Content-disposition", "attachment;filename=${file.getName()}") 

    OutputStream out = response.getOutputStream() 
    out.write(file.bytes) 
    out.close() 
    file.delete() 
    return 
    ... 
} 

在我使用下面的語句形式的觀點:

<g:actionSubmit action="controllerMethod" class="btn" value="Get XML!" /></td> 

我想這也應該是可以使用a

<g:link controller="foobar" action="controllerMethod" class="btn">GetXML</g:link> 
+0

我試過了@railsdog的建議和建議。我仍然無法讓瀏覽器提示下載。我注意到我沒有添加客戶端代碼。我現在也添加了客戶端代碼。我錯過了什麼? – JavaProgrammer

相關問題