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

Render .csv file on browser instead of downloading

在我的 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 文件?在HttpResponse中应该设置什么contentType?

您设置的 Content-Disposition header 告诉浏览器您希望在浏览器中内联显示文件内容:

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

如果支持,浏览器会执行此操作。例如,大多数(如果不是全部)现代浏览器都支持在浏览器中内联显示 PDF 文件;对于 CSV,情况恰恰相反。

但是,您遇到的错误(在评论中描述:localhost sent an invalid response. ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION)对于 CSV 文件是正确的,因为 您正在设置 Content-Disposition header两次 用于 CSV:第一次在 default 情况下用于 switch 语句,第二次在 switch 语句之后。

通过在您的 switch 语句中处理 text/csv 来更正它。