我有以下代码用于从字节数组中保存图像。
我可以使用以下代码成功保存图像。
目前我使用" .png"保存图像格式但我想从字节数组中获取图像扩展名并使用此扩展名保存图像。
这是我的代码
public boolean SaveImage(String imageCode) throws Exception {
boolean status = false;
Connection dbConn = null;
CallableStatement callableStatement = null;
try {
String base64Image = imageCode.split(",")[1];
byte[] imageBytes = javax.xml.bind.DatatypeConverter.parseBase64Binary(base64Image);
Properties propFile = LoadProp.getProperties();
String filepath = propFile.getProperty(Constants.filepath);
File file = new File(filepath + "xyz.png");
FileOutputStream fos = new FileOutputStream(file);
try {
fos.write(imageBytes);
} finally {
fos.close();
}
} catch (Exception e) {
throw e;
} finally {
if (callableStatement != null) {
callableStatement.close();
}
if (dbConn != null) {
dbConn.close();
}
}
return status;
}
我正在使用Java和Tomcat 8。
答案 0 :(得分:14)
有很多解决方案。非常简单,例如:
String contentType = URLConnection.guessContentTypeFromStream(new ByteArrayInputStream(imageBytes));
或者您可以使用第三方库。像Apache Tika:
String contentType = new Tika().detect(imageBytes);
答案 1 :(得分:0)
您是否会使用base64图像数据的前缀标题package com.ozpas.entegre.controller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractAction;
public class DelegateAction extends AbstractAction {
/**
*
*/
private static final long serialVersionUID = 1L;
ActionListener myaction = (ae) -> {
System.out.println("empty action");
};
public DelegateAction(ActionListener customaction) {
this.myaction = customaction;
}
@Override
public void actionPerformed(ActionEvent e) {
myaction.actionPerformed(e);
}
public ActionListener getMyaction() {
return myaction;
}
public void setMyaction(ActionListener myaction) {
this.myaction = myaction;
}
}
?
从RFC中,“数据”网址定义:
data:image/png;base64
样品:
### Form : `data:[<mediatype>][;base64],<data>`
### Syntax:
`dataurl := "data:" [ mediatype ] [ ";base64" ] "," data
mediatype:= [ type "/" subtype ] *( ";" parameter )
data := *urlchar
parameter := attribute "=" value`
然后你可以用gif获得扩展名。