Я пытаюсь разрешить пользователям загружать изображения на сервер. Он почти делает то, что должен, но файл на сервере не работает.
<input id=inputPic name='pic' type='file' accept='image/*'>
<button onclick='uploadPic(\"inputPic\");'>Save</button>
JavaScript для загрузки на стороне клиента:
function uploadPic(inputId){
var xhr = new XMLHttpRequest();
xhr.open("POST", "...uploadImage");
var data = new FormData();
data.append("file", document.getElementById(inputId).files[0]);
xhr.send(data);
}
Java для обработки запроса на загрузку на стороне сервера:
@POST
@Path("{key}/uploadImage")
public void upload(@PathParam("key") String key, String data) {
uploadImage(key, data);
}
public void uploadImage(String name, String data){
try{
byte[] bytes = data.getBytes();
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File("..."+name+".png")));
stream.write(bytes);
stream.flush();
stream.close();
}
catch(Exception e){
System.out.println("Error while uploading image");
e.printStackTrace();
}
}
Ничто не выдает ошибку. Файл создан на сервере, но файл поврежден. Есть идеи, как решить эту проблему?
EDIT:
Я думаю, что все ближе к решению. Похоже, я должен изменить кодировку, потому что это выглядит как
"NPNG IHDR > a bKGD pHYs tIME & - IDATx y ՝ ? Vo ] wA B ... "
вместо
"‰ PNG IHDR € Ã> aË bKGD ÿ ÿ ÿ ½§“ pHYs šœ tIMEâ
& - £ ˜ª IDATxÚíy˜ ”?ï? ÏVoíÕ] ½wA³µ € Bƒ -" j * âƒ7 ... ".
Я просто не знаю, какую кодировку мне действительно нужно использовать.
Edit:
ОК ... это не / не только кодировка.
Edit:
Получил это на работу. Я использовал readAsDataURL на стороне клиента для отправки в файл данных, закодированных и декодированных на стороне сервера!