在我目前的春天的項目,我有一些input[type=file]
場這就需要通過這個PropertyEditorSupport類進行處理的一種形式:轉換Base64編碼字符串到字節數組
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代碼添加到其他PARAMS:
$('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)。
有人可以看到這裏有什麼問題嗎?
這裏的緩衝區ByteArrayInputStream的新(緩衝)相同這裏的緩衝區的字節[]緩衝區? – reos
是的,它是相同的變量。 –
嗯我建議你使用編碼,基本的東西base64。您在客戶端編碼圖像,然後在解碼的服務器中編碼。 – reos