从base64编码恢复文件名和扩展
我需要写服务器端部分发布论坛回复。我收到一封包含回复文本的邮件请求,并附有一个base64编码的字符串。有没有办法从这个base64字符串恢复文件名和扩展名,或者我需要将它们作为请求中的附加参数?以base64字符串的形式发布附件是否正确?从base64编码恢复文件名和扩展
编辑
这是一个春季的web服务,我期待着发布请求。现在我正在使用x-www-form-urlencoded编码,并希望消息和编码文件成为表体的一部分。但编码类型可以根据需要进行更改。 在服务器端,我只是将它作为requestParams映射检索,并从此映射中提取编码的String。
如果文件名/扩展名未包含在base64编码字符串中(例如在消息中),我不认为有一种方法可以恢复它(可以取决于上下文)。使用另一种编码类型不会改变它;例如客户端必须指定文件名/扩展名,并在服务器使用它之前将其包含在请求中(作为参数或在编码内容中)。
我添加了文件名作为参数请求 – user2281439
使用Apache Tika
你可以得到大多数常见文件的文件MIME类型,并从中可以提取文件扩展名(不是文件名,但是...)。如果Tika可以检测到MIME类型,这将起作用。之后,您可以将MIME类型转换为想要的文件扩展名。查看我的代码以查看一些常见的代码阅读关于Tika和mime类型here.
private void findFileExtension(String base64) throws IOException{
byte[] base64Bytes = DataTypeConverter.parseBase64Binary(base64)
Tika tika = new Tika();
String fileType = tika.detect(base64Bytes);
String fileExtension = changeFileType(fileType);
File tempFile = File.createTempFile("MyFile", "." +fileExtension);
}
private String changeFileType(String fileType) {
boolean cahnged = false;
if (fileType.subSequence(0, 5).equals("image")) {
fileType = fileType.substring(6, fileType.length());
}
if (fileType.contains("PDF")) {
fileType = "pdf";
cahnged = true;
}
if (fileType.contains("msword")) {
fileType = "doc";
cahnged = true;
}
if (fileType.contains("wordprocessingml")) {
fileType = "docx";
cahnged = true;
}
if (fileType.contains("excel")) {
fileType = "xls";
cahnged = true;
}
if (cahnged){
log.debug("Changed fileType to: ["+fileType+"]");
}
return fileType;
}
我想我们需要更多信息。这是一个HTML表单POST,其中包含您正在讨论的'multipart/form-data'编码吗?如果是这样,你在服务器端使用什么技术来读取它?请编辑问题以澄清。 – Andreas
我编辑过的问题。 – user2281439
如果你想能够接收文件,我不认为你可以使用x-www-form-urlencoded。 multipart/form-data通常用于这个 –