- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的公司,出于额外原因,我需要将 MIME 类型与文件扩展名进行比较。我有一个 CommonsMultipartFile
。我试图找出进行这种比较的最佳方法。我看到了 MimetypesFileTypeMap
,但不确定它是否适用于此处。我试图避免(或限制)任何硬编码。
我得到这样的值:
CommonsMultipartFile file = ...;
String fileName = file.getOriginalFilename();
String contentType = file.getContentType();
String extension = FilenameUtils.getExtension(fileName);
我很感激在这方面的任何指导和帮助。谢谢!
最佳答案
用于这种情况的 Java 库非常有限(类型数量)。我是这样做的:
static String getMimeType(String fileName) {
// 1. first use java's built-in utils
FileNameMap mimeTypes = URLConnection.getFileNameMap();
String contentType = mimeTypes.getContentTypeFor(fileName);
// 2. nothing found -> lookup our in extension map to find types like ".doc" or ".docx"
if (contentType == null) {
String extension = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length());;
contentType = fileExtensionMap.get(extension);
}
return contentType;
}
第 2 步涉及静态 map :
private static final Map<String, String> fileExtensionMap;
static {
fileExtensionMap = new HashMap<String, String>();
// MS Office
fileExtensionMap.put("doc", "application/msword");
fileExtensionMap.put("dot", "application/msword");
fileExtensionMap.put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
fileExtensionMap.put("dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template");
fileExtensionMap.put("docm", "application/vnd.ms-word.document.macroEnabled.12");
fileExtensionMap.put("dotm", "application/vnd.ms-word.template.macroEnabled.12");
fileExtensionMap.put("xls", "application/vnd.ms-excel");
fileExtensionMap.put("xlt", "application/vnd.ms-excel");
fileExtensionMap.put("xla", "application/vnd.ms-excel");
fileExtensionMap.put("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
fileExtensionMap.put("xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template");
fileExtensionMap.put("xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12");
fileExtensionMap.put("xltm", "application/vnd.ms-excel.template.macroEnabled.12");
fileExtensionMap.put("xlam", "application/vnd.ms-excel.addin.macroEnabled.12");
fileExtensionMap.put("xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12");
fileExtensionMap.put("ppt", "application/vnd.ms-powerpoint");
fileExtensionMap.put("pot", "application/vnd.ms-powerpoint");
fileExtensionMap.put("pps", "application/vnd.ms-powerpoint");
fileExtensionMap.put("ppa", "application/vnd.ms-powerpoint");
fileExtensionMap.put("pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
fileExtensionMap.put("potx", "application/vnd.openxmlformats-officedocument.presentationml.template");
fileExtensionMap.put("ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow");
fileExtensionMap.put("ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12");
fileExtensionMap.put("pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12");
fileExtensionMap.put("potm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12");
fileExtensionMap.put("ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12");
// Open Office
fileExtensionMap.put("odt", "application/vnd.oasis.opendocument.text");
fileExtensionMap.put("ott", "application/vnd.oasis.opendocument.text-template");
fileExtensionMap.put("oth", "application/vnd.oasis.opendocument.text-web");
fileExtensionMap.put("odm", "application/vnd.oasis.opendocument.text-master");
fileExtensionMap.put("odg", "application/vnd.oasis.opendocument.graphics");
fileExtensionMap.put("otg", "application/vnd.oasis.opendocument.graphics-template");
fileExtensionMap.put("odp", "application/vnd.oasis.opendocument.presentation");
fileExtensionMap.put("otp", "application/vnd.oasis.opendocument.presentation-template");
fileExtensionMap.put("ods", "application/vnd.oasis.opendocument.spreadsheet");
fileExtensionMap.put("ots", "application/vnd.oasis.opendocument.spreadsheet-template");
fileExtensionMap.put("odc", "application/vnd.oasis.opendocument.chart");
fileExtensionMap.put("odf", "application/vnd.oasis.opendocument.formula");
fileExtensionMap.put("odb", "application/vnd.oasis.opendocument.database");
fileExtensionMap.put("odi", "application/vnd.oasis.opendocument.image");
fileExtensionMap.put("oxt", "application/vnd.openofficeorg.extension");
// Other
fileExtensionMap.put("txt", "text/plain");
fileExtensionMap.put("rtf", "application/rtf");
fileExtensionMap.put("pdf", "application/pdf");
}
对我来说很好,希望对你有帮助!
关于Java:一种将 Mime(内容)类型与 CommonsMultipartFile 的文件扩展名相匹配的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27402992/
我有一个接受CommonsMultipartFile并将其上传到服务器的服务方法 class ExampleService() { def saveFile(CommonsMultipartF
我正在尝试开发一个应用程序,用户将从屏幕上传文件,该文件将在服务器端进行处理。我正在使用 Adobe Flex 的 UI,Spring 3.2 作为中间件和 Java 5。我可以成功上传文件并在服
我正在为我的应用程序创建 API。在基于 GUI 浏览器的应用程序中,文件通过表单提交上传。所以我只是执行 CommonsMultipartFile file = request.getFile(my
大家, 我正在使用 Grails 中的 spock 测试某些需要 CommonMultipartFile 作为输入参数的方法。 我的问题是如何创建这些文件,以便不生成本地文件。其中一些必须使用 req
我正在尝试使用 JPA 将上传的文件保存到数据库。 (对我来说)最“自然”的方式是将域对象定义为: @Entity class UploadFile { ... public CommonsM
我有一个将 CommonsMultipartFile 对象作为参数的 junit 测试方法。 我正在尝试创建一个 FileItem 对象,以便将其传递给构造函数, CommonsMultipartFi
我的 Spring Boot 应用程序中有以下部分代码: base64str 变量具有编码 Base 64 图像, byte[] data = Base64.decode(base64str); 但我
我正在尝试使用 MultipartFile 发出 POST 请求。首先,我想将文件转换为 MultipartFile: File file = new File(filePath); DiskFile
我有一个像这样的 CommonsMultipartFile 类型字段的 bean: public class Placement implements Serializable { private s
我无法读取我在 Grails 中上传的文件。 write 是数据库中我存储上传文件的列。 CommonsMultipartFile testFile = request.getFile('templa
我正在尝试使用一个在请求中接受 CommonsMultipartFile 的 Web 服务。因此,我使用 Spring 的 RestTemplate 创建了一个 HTTP 客户端。下面的方法接受 UR
我正在尝试使用推土机从 CommonsMultipartFile 映射到 byte[]。 我知道我需要一个 customConverter 因为 dozer 对 CommonsMultipartFil
我正在使用 Spring-MVC 3.0,在我的应用程序中,我发送了一些带有多个附件的信息,每个文件都有标题、Id 等。所以,我制作了一个 DTO,如下所示 public class MyDTO {
我有一个表单对象,它由 Spring 自动正确填充。在这个表单对象中,我有一个字段: CommonsMultipartFile file; 用户可以上传文件,并且表单对象正确包含该文件。一切都很好。但
在我的公司,出于额外原因,我需要将 MIME 类型与文件扩展名进行比较。我有一个 CommonsMultipartFile。我试图找出进行这种比较的最佳方法。我看到了 MimetypesFileTyp
我正在尝试使用 javascript 的 XMLHttpRequest 对象上传图像,但 Spring 一直抛出 NoSuchMethodException。异常情况如下: java.lang.NoS
我正在使用 spring 3.0 org.springframework.web.multipart.commons.CommonsMultipartFile 进行文件上传。我想写下使用 Mockit
我不知道该怎么做附件。已安装插件“邮件”,相关文件是从表单上载(成功)的.csv文件。 这有效: def f = request.getFile('uploadedFile') //do a bunc
我正在一个屏幕上工作,它将文件作为 BFILE 类型上传到 oracle 表。我正在使用 spring3 和 hibernate3。 BO 类如下所示: @Entity @Table(name="ab
它有效: 查看(普惠制): Controller : def destination = "D:\\someFolder\\image.jpg"; def f = reques
我是一名优秀的程序员,十分优秀!