Hallo zusammen,
ich habe ein merkwürdiges Problem:
Ich übertrage ein binäres Dokument (z.b. pdf) in dem ich es base64 kodiere und an die url anhänge.
Beim Empfänger wird das dann nun auf Platte geschrieben.
So wie ich es bisher habe klappt das auch, ich hole mir die datei direct aus dem request objekt, dekodiere und krieg ein byte array zurück.
Das schreib ich nun mittels
So, das klappt und wenn ich das pdf öffne stimmt auch alles.
Folgendes klappt aber nicht (und so hätte ich es gerne...):
Ich übergebe das request-objekt einer Methode, die die Parameter rausholt, prüft und in eine HashMap schreibt.
Das passiert so genau so wie oben eigentlich:
nur das es halt in einer Methode ist der ich das request-Objekt übergebe.
Nun schieb ich das byte-array in meine HashMap:
So und nun das was ich nicht verstehe:
Meine Methode gibt nun die HashMap zurück, auf den Parameter greif ich dann einmal so zu:
Tja, dummerweise klappt das dann nicht, das pdf lässt sich zwar schreiben, aber offensichtlich ist da was schief gegangen weil der Inhalt fehlt....sprich ich kann es zwar öffnen, und es hat auch die richtige Seitenzahl, der komplette Inhalt fehlt jedoch....
Das versteh ich nicht, ich mal alles mit UTF-8, hol mir nachher die bytes und trotzdem klappt es nicht?
Woran kann das liegen, was könnte ich ändern?
Gibt es eine Möglichkeit ein Byte-Array in einer HashMap zu speichern ohne irgendwas mit Strings machen zu müssen?
ich habe ein merkwürdiges Problem:
Ich übertrage ein binäres Dokument (z.b. pdf) in dem ich es base64 kodiere und an die url anhänge.
Beim Empfänger wird das dann nun auf Platte geschrieben.
So wie ich es bisher habe klappt das auch, ich hole mir die datei direct aus dem request objekt, dekodiere und krieg ein byte array zurück.
Code:
byte[] fileContent = null;
try {
fileContent = base64.decode(
request.getParameter(CommonConstants.URL_ARG_DATA_FILE_CONTENT)
.getBytes(CommonConstants.DEFAULT_CHARSET));
if(fileContent == null) {
logger.error(CommonConstants.ERR_MISSING_PARAM + CommonOutput.SPACER + CommonConstants.URL_ARG_DATA_FILE_CONTENT);
return null;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Das schreib ich nun mittels
Code:
public static boolean writeDataFile(String targetDir, byte[] fileContent, String fileName) {
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(targetDir + fileName);
fileOutputStream.write(fileContent);
fileOutputStream.flush();
fileOutputStream.close();
} catch (IOException e) {
logger.error(e.getMessage());
logger.error(e);
}
finally {
if(fileOutputStream != null){
try {
fileOutputStream.close();
} catch (IOException e) {
logger.error(e.getMessage());
logger.error(e);
return false;
}
}
}
return true;
So, das klappt und wenn ich das pdf öffne stimmt auch alles.
Folgendes klappt aber nicht (und so hätte ich es gerne...):
Ich übergebe das request-objekt einer Methode, die die Parameter rausholt, prüft und in eine HashMap schreibt.
Das passiert so genau so wie oben eigentlich:
Code:
byte[] fileContent = null;
try {
fileContent = base64.decode(
request.getParameter(CommonConstants.URL_ARG_DATA_FILE_CONTENT)
.getBytes(CommonConstants.DEFAULT_CHARSET));
if(fileContent == null) {
logger.error(CommonConstants.ERR_MISSING_PARAM + CommonOutput.SPACER + CommonConstants.URL_ARG_DATA_FILE_CONTENT);
return null;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
nur das es halt in einer Methode ist der ich das request-Objekt übergebe.
Nun schieb ich das byte-array in meine HashMap:
Code:
try {
params.put(CommonConstants.URL_ARG_DATA_FILE_CONTENT, new String(fileContent, "UTF-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
So und nun das was ich nicht verstehe:
Meine Methode gibt nun die HashMap zurück, auf den Parameter greif ich dann einmal so zu:
Code:
((String)params.get(CommonConstants.URL_ARG_DATA_FILE_CONTENT)).getBytes("UTF-8")
Tja, dummerweise klappt das dann nicht, das pdf lässt sich zwar schreiben, aber offensichtlich ist da was schief gegangen weil der Inhalt fehlt....sprich ich kann es zwar öffnen, und es hat auch die richtige Seitenzahl, der komplette Inhalt fehlt jedoch....
Das versteh ich nicht, ich mal alles mit UTF-8, hol mir nachher die bytes und trotzdem klappt es nicht?
Woran kann das liegen, was könnte ich ändern?
Gibt es eine Möglichkeit ein Byte-Array in einer HashMap zu speichern ohne irgendwas mit Strings machen zu müssen?