文件上传Content-disposition中Attachment和inline的区别
程序员文章站
2022-06-02 13:49:13
...
在日常开发中文件上传需要设置content-disposition类型,是下载还是内嵌显示。如我用阿里云或者京东云上传图片,我需要打开连接是直接显示图片,而导出excel文件我希望直接下载文件那么content-disposition设置就不一样。
java web中下载文件时,我们一般设置Content-Disposition告诉浏览器下载文件的名称,是否在浏览器中内嵌显示.
Content-disposition: inline; filename=1502849449726.jpg表示浏览器内嵌显示一个文件
Content-disposition: attachment; filename=1502849449726.xlsx表示会下载文件,如火狐浏览器中
案例:图片上传设置content-dispition
//指定该Object文件类型,默认值application/octet-stream
objectMetadata.setContentType(getContentType(fileName));
/**
* 通过文件名判断并获取OSS服务文件上传时文件的contentType
* @param fileName 文件名
* @return 文件的contentType
*/
public static String getContentType(String fileName){
//文件名后缀
String fileExtension = fileName.substring(fileName.lastIndexOf("."));
if(".bmp".equalsIgnoreCase(fileExtension)) {
return "image/bmp";
}
if(".gif".equalsIgnoreCase(fileExtension)) {
return "image/gif";
}
if(".jpeg".equalsIgnoreCase(fileExtension) || ".jpg".equalsIgnoreCase(fileExtension) || ".png".equalsIgnoreCase(fileExtension) ){
return "image/jpeg";
}
if(".html".equalsIgnoreCase(fileExtension)){
return "text/html";
}
if(".txt".equalsIgnoreCase(fileExtension)){
return "text/plain";
}
if(".vsd".equalsIgnoreCase(fileExtension)){
return "application/vnd.visio";
}
if(".ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension)) {
return "application/vnd.ms-powerpoint";
}
if(".doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension)) {
return "application/msword";
}
if(".xml".equalsIgnoreCase(fileExtension)) {
return "text/xml";
}
return "image/jpeg";
}
备注:这样在浏览器访问上传图片地址就是直接打开图片而不是下载图片。默认头文件类型为application/octet-stream,故必须针对可内嵌显示的类型,如上诉代码中列表出的那么多类型。
下一篇: Servlet的文件下载案例