有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java“ContentDisposition”和带有AngularJS的标题中的文件名

我使用angularjs 1.3.14

我有一个java REST服务生成一个xml文件,其标题是:“内容处置”、“附件;文件名=您的文件名”

我需要用AngularJS上的文件名来获取文件

我有这个密码:

$http.get('/someUrl').success(function(data, status, headers){
var myHeaders = headers();
...
});

但是在MyHeader中只有{content type=“application/xml”}我需要找到“内容配置”、“附件;文件名=你的文件名”

Java服务:

@GET
@Path(EXPORT_URL)
@Produces(MediaType.APPLICATION_XML)
public Response export(@Context HttpServletRequest request) {
    String userName = request.getRemoteUser();
    if (userName != null) {
        ...
        ResponseBuilder response = Response.ok(myObject);
        response.header("Content-Disposition", "attachment; filename=myFile.xml");
        return response.build();
    } else {
        return Response.status(Status.FORBIDDEN).build();
    }
}

共 (2) 个答案

  1. # 1 楼答案

    两年后,我找到了一个解决方案:

    @RequestMapping(value = "/export", method = RequestMethod.GET, produces = MediaType.APPLICATION_XML)
    public ResponseEntity<String> export(...
    
    HttpHeaders headers = new HttpHeaders();
    headers.setAccessControlExposeHeaders(Collections.singletonList("Content-Disposition"));
    headers.set("Content-Disposition", "attachment; filename=" + filename);
    return new ResponseEntity<>(exportedContent, headers, HttpStatus.OK);
    
  2. # 2 楼答案

    这是服务器端CORS问题。您需要启用以下功能:

    "Access-Control-Expose-Headers", "Content-Disposition"