在浏览器上呈现.csv文件而不是下载

时间:2018-05-20 16:15:56

标签: java spring-boot media-type

在我的Spring-boot应用程序中,要呈现类型.txt.pdf的文件,我将HttpHeader设置为以下属性。

private HttpHeaders getAppropriateHeaders( String fileType, String fileName )
{
    HttpHeaders headers = new HttpHeaders();

    switch ( fileType )
    {
        case FileConstants.PDF_TYPE :
            headers.setContentType(MediaType.APPLICATION_PDF);
            break;

        case FileConstants.TXT_TYPE :
            headers.setContentType(MediaType.TEXT_PLAIN);
            break;

        case FileConstants.PNG_TYPE :
            headers.setContentType(MediaType.IMAGE_PNG);
            break;

        case FileConstants.JPEG_TYPE :
            headers.setContentType(MediaType.IMAGE_JPEG);
            break;

        default :
            // If set file will be downloaded
            headers.setContentDispositionFormData(fileName, fileName);
            break;
    }

    headers.add("content-disposition", "inline;filename=" + fileName);
    headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");

    return headers;

}

到目前为止,pdftxtpngjpeg文件正在浏览器中呈现。但我需要做什么以相同的方式呈现.csv个文件?应在contentType中设置HttpResponse

1 个答案:

答案 0 :(得分:1)

您设置的Content-Disposition标题告诉浏览器您希望在浏览器中内嵌显示该文件的内容:

headers.add("content-disposition", "inline;filename=" + fileName);

如果支持,浏览器将执行此操作。例如,大多数(如果不是全部)现代浏览器都支持在浏览器中内嵌显示PDF文件;使用CSV,情况正好相反。

但是,您获得的错误(在评论中描述:localhost sent an invalid response. ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION)对于CSV文件是正确的,因为您为CSV设置了两次内容处置标题:第一次default语句的switch个案,switch语句后的第二次。

通过处理text/csv声明中的switch来纠正错误。