在浏览器上呈现 .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;
}
到目前为止,pdf
、txt
、png
、jpeg
文件正在浏览器上呈现。但是我需要做什么才能以相同的方式呈现 .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
来更正它。
在我的 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;
}
到目前为止,pdf
、txt
、png
、jpeg
文件正在浏览器上呈现。但是我需要做什么才能以相同的方式呈现 .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
来更正它。