我需要帮助将xlsx文件从服务器发送回客户端
以下是它的工作方式:
JavaScript(点击#export_xls按钮):
export_xls: function(event) {
window.location = ... + this.workspace.query.id + "/export/xls";
}
Java(使用Apache POI API创建xls文件):
@GET
@Produces({"application/vnd.ms-excel" })
@Path("/{queryname}/export/xls/{format}")
public Response getQueryExcelExport(
@PathParam("queryname") String queryName,
@PathParam("format") @DefaultValue("flattened") String format){
// ...
try {
byte[] doc = olapQueryService.getExport(queryName,"xls","flat"); // file
String name = "file.xls";
return Response.ok(doc, MediaType.APPLICATION_OCTET_STREAM).header(
"content-disposition",
"attachment; filename = " + name).header(
"content-length",doc.length).build();
}
catch (Exception e) {
log.error("Cannot get excel for query (" + queryName + ")",e);
return Response.serverError().build();
}
}
它工作正常,但现在我需要将一些数据从javascript发送到java,然后java处理它并创建xlsx 所以,我使用ajax发送数据(以json格式)......
export_xls: function(event) {
var data = this.workspace.query.result.lastresult();
var url = ... + this.workspace.query.id + "/testexportxls";
$.ajax({
url: url,
type: "POST",
data: JSON.stringify(data),
async: false,
contentType: "application/json"
});
},
...并在java中创建我的文件(几乎和以前一样):
@POST
@Produces({"application/vnd.ms-excel" })
@Consumes(MediaType.APPLICATION_JSON)
@Path("/{queryname}/testexportxls")
public Response setQueryExcelExport(final Object jsonData)
{
Workbook wb = MyFileBuilder.getFile(jsonData);
try {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
wb.write(bout);
byte[] doc = bout.toByteArray();
String name = "file.xlsx";
return Response.ok(doc, MediaType.APPLICATION_OCTET_STREAM).header(
"content-disposition",
"attachment; filename = " + name).header(
"content-length",doc.length).build();
}
catch (Exception e){
log.error("Error while xlsx-file creating. Exception message: ",e);
return Response.serverError().build();
}
}
但我现在无法获得该文件,因为我认为这是ajax。
您是否知道一些快速解决方案,只需最少的代码编辑?
不幸的是,我对Response几乎一无所知,或者一些HttpServletResponse以及类似的东西= /
感谢您的时间。
答案 0 :(得分:0)
如果要在成功时定义回调函数,该函数是否能够处理该文件?
似乎没有,所以我将进行第二次尝试:将JSON放入隐藏表单输入中,然后POST表单?