2013-10-28 70 views
2

我目前正在與Play Framework(使用Java控制器)一起開展項目,並且在單擊按鈕並從中獲取信息後,我試圖強制瀏覽器下載.txt.xls文件控制器。儘管我正確地構建了這兩種類型的文件,但我還沒有找到強制下載它的方式。
經過幾個小時的深入調查,我設法通過JavascriptRoutesAjax調用控制器Javascript,但我不能強制下載,儘管我可以將.txt內容放入div(加載正確)。單擊Play Framework上的按鈕後強制文件下載

這是我現在有:

function exportText(){ 
    jsRoutes.controllers.User.generateText().ajax({ 
    success: function(data) { 
     $('#testDiv').html(data); 
    }, 
    error: function() { 
     alert("Error!") 
    } 
    }) 
} 

exportText()點擊一個按鈕時叫)

public static Result generateText() { 
    response().setContentType("application/x-download"); 
    response().setHeader("Content-disposition","attachment; filename=test.txt"); 
    return ok(generateTXT("test.txt")); 
} 

generateTXT(字符串)檢索File文件)

任何幫助將真正apreciated!謝謝!

編輯

javascriptRoutes方法是這樣的:

public static Result javascriptRoutes() { 
    response().setContentType("text/javascript"); 
    return ok(
     Routes.javascriptRouter("jsRoutes", 
     // Routes 
     controllers.routes.javascript.User.generateText() 
    ) 
    ); 
    } 
+0

難道應該是「Content-Disposition」而不是「Content-disposition」? – johanandren

+0

還是一樣的迴應!也許我沒有正確地「下載」文件,一旦「Ajax」部分成功......謝謝! – FranciscoBouza

+0

啊哈,沒有考慮js代碼,你有沒有試過將window.location設置爲導出url(你可以從jsroutes-object中獲取它),而不是用ajax調用它? – johanandren

回答

2

好吧,我意識到JavaScript是拉動我們的腿太多了,所以我決定做「斯卡拉之路」之類此:

查看

@form(routes.User.generateText()){ 
    <input type="submit" name="commit" value="Export as .txt"> 
} 

控制器

response().setContentType("application/x-download"); 
response().setHeader("Content-disposition", "attachment; filename=test.txt"); 
return ok(generateTXT(numbers, "test.txt")); 

(正如我在質詢時說,generateTXT(字符串)檢索File文件)

謝謝!