2016-07-19 30 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

相关问题