Сохранить загруженный файл изображения на сервере - Java - PullRequest
1 голос
/ 07 июня 2019

Я пытаюсь разрешить пользователям загружать изображения на сервер. Он почти делает то, что должен, но файл на сервере не работает.

<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 на стороне клиента для отправки в файл данных, закодированных и декодированных на стороне сервера!

...