2

我目前正在使用Play Framework(使用控制器)进行一个项目,并且在单击按钮并从控制器获取信息后Java,我试图强制浏览器下载.txt和文件。.xls虽然我正确地形成了两种类型的文件,但我还没有找到强制下载的方法。
经过数小时的深入调查,我设法Javascript通过JavascriptRoutesand调用了控制器Ajax,但我无法强制下载它,尽管我可以将.txt内容放在一个 div 中(正确加载)。

这就是我现在所拥有的:

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(String)检索File文件)

任何帮助都会非常感激!谢谢!

编辑

javascriptRoutes方法如下所示:

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

1 回答 1

2

好吧,我意识到 Javascript 太拖我们的腿了,所以我决定像这样“Scala 方式”来做:

看法

@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(String)检索File文件)

谢谢!

于 2014-04-02T15:09:33.483 回答