Проблема с загрузкой изображения с помощью JAVA в ActiveCollab API - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь загрузить изображение с JAVA на самодостаточный ActiveCollab.

Я сделал пару тестов, и этот мне кажется самым надежным из них на сегодняшний день. Во всяком случае, когда я пытаюсь запустить его, я получаю код 200-OK и пустой массив в качестве ответа. ,

public static void main(String args[]) throws IOException  {



        URL url = new URL("<SITE>/api/v1/upload-files");
        HttpURLConnection c = (HttpURLConnection) url.openConnection();
        c.setDoOutput(true);
        c.setRequestProperty("Content-Type", "multipart/form-data");
        c.setRequestProperty("X-Angie-AuthApiToken", "<TOKEN>");

        JSONArray array = new JSONArray();
        array.put("/test.png");
        array.put("image/png");

        OutputStream out = c.getOutputStream();
        out.write(array.toString().getBytes());
        out.flush();
        out.close();

        BufferedReader buf = new BufferedReader(new InputStreamReader(c.getInputStream()));
        StringBuffer response = new StringBuffer();
        String line;
        while (null != (line = buf.readLine())) {
            response.append(line);
        }

        JSONArray message = new JSONArray(response.toString());
        System.out.println(message);

}

В документации API я должен получить заполненный массив json в качестве ответа. На самом деле я не знаю, по чему я скучаю.

1 Ответ

0 голосов
/ 09 мая 2019

Наконец я решил это!Как сказал @StephanHogenboom, проблема была в multipart / form-data, параметры нужно было вводить туда, а не через JSONArray.Я не нашел так много информации о том, как работать с multipart в java.net, но, по крайней мере, я нашел устаревший, но функциональный способ работы.

public static void main(String args[]) throws IOException  {



        URL url = new URL("<SITE>/api/v1/upload-files");
        HttpURLConnection c = (HttpURLConnection) url.openConnection();
        c.setDoOutput(true);
        c.setRequestMethod("POST");
        c.setRequestProperty("X-Angie-AuthApiToken", "<TOKEN>");

        File file = new File("/1.png");
        FileBody fileBody = new FileBody(file, "image/png");
        MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.STRICT);
        multipartEntity.addPart("file", fileBody);

        c.setRequestProperty("Content-Type", multipartEntity.getContentType().getValue());

        OutputStream out = c.getOutputStream();
        multipartEntity.writeTo(out);
        out.close();

        BufferedReader buf = new BufferedReader(new InputStreamReader(c.getInputStream()));
        StringBuffer response = new StringBuffer();
        String line;
        while (null != (line = buf.readLine())) {
            response.append(line);
        }

        JSONArray message = new JSONArray(response.toString());
        System.out.println(message);

    }

На самом деле это работает для меня,но если кто-то может дать мне идеи о том, как улучшить это было бы здорово!

...