在我当前的 spring 项目中,我有一个包含一些input[type=file]
字段的表单,这些字段需要由这个 PropertyEditorSupport 类处理:
public class ImagemEditor extends PropertyEditorSupport {
private String file_path = System.getProperty("user.home")+File.separator+".store"+File.separator+"Pictures";
@Override
public void setAsText(String text) {
...
}
...
}
图像作为 Base64 字符串发送到服务器,并通过此 javascript 代码添加到其他参数:
$('input[type=file]').on("change", function(){
var id = $(this).attr("id");
var name = $(this).attr("name");
if(typeof id !== "undefined") {
if(this.files.length > 0) {
reader = new FileReader();
reader.onloadend = function () {
str += "&" + name + "=" + this.result;
}
reader.readAsDataURL(this.files[0]);
}
}
});
在 PropertyEditorSupport 类中,我读取带有 Base64 编码图像的字符串并转换为byte[]
,只是为了将此字节存储到文件中:
byte[] buffer = Base64.decodeBase64(text.split(",")[1]);
File arquivo;
try {
arquivo = new File(file_path+File.separator+file_name()+".jpeg");
} catch (Exception e) {
e.printStackTrace();
arquivo = null;
}
File dir = new File(file_path);
if(!dir.exists())
dir.mkdirs();
if(!arquivo.exists())
try {
arquivo.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
FileOutputStream fileOut;
try {
fileOut = new FileOutputStream(arquivo);
} catch (Exception e) {
e.printStackTrace();
fileOut = null;
}
try {
fileOut.write(buffer);
} catch (Exception e) {
e.printStackTrace();
}
try {
fileOut.close();
} catch (Exception e) {
e.printStackTrace();
}
但是当我尝试打开生成的图像时,它与我上传的图像不同(我使用命令行工具vbindiff
来验证,并且图像的标题始终相同)。甚至无法打开生成的图像(我在 Linux/Kubuntu 上使用 Gwenview)。
有人可以看到这里有什么问题吗?