Загрузить файл на сервер, используя Rest API - PullRequest
0 голосов
/ 21 июня 2019

Я хочу зафиксировать текстовый файл "demo2.txt" на сервере bitbucket, используя API остальных.Я могу загрузить тот же файл, используя Postman, но он не работает с кодом Java.Как показано в приведенном ниже коде, я хочу отправить строковый объект "str" ​​в качестве тела.Может ли кто-нибудь помочь мне загрузить файл на сервер bitbucket?Также, пожалуйста, дайте мне знать, если есть другой способ сделать это.

URL url = new URL("https://api.bitbucket.org/2.0/repositories/{team name}/{repository name}/src");

HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();

httpCon.setRequestProperty("X-Requested-with", "Curl"); 
httpCon.setDoOutput(true);
httpCon.setDoInput(true); 
httpCon.setRequestProperty("Connection", "Keep-Alive");
httpCon.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary);
httpCon.setRequestProperty("Accept", "application/x-www-form-urlencoded");
httpCon.setRequestProperty("Authorization", basicauth); 
httpCon.setRequestMethod("POST"); 


String str =
 "{"        
+ "\"-F\":\"File3=@/D:/log/demo2.txt\" "
+ "}";

try { 
    OutputStream output = httpCon.getOutputStream();
    output.write(str.getBytes()); 
    output.close();
} catch(Exception e){
    System.out.println(e.getMessage());
}
int responseCode = httpCon.getResponseCode();
String inputLine; 
StringBuffer response = new StringBuffer();                 
if (responseCode == HttpURLConnection.HTTP_OK || responseCode == HttpURLConnection.HTTP_CREATED){
    BufferedReader in = new BufferedReader(new . 
    InputStreamReader(httpCon.getInputStream()));               

    while ((inputLine = in.readLine()) != null) { 
        response.append(inputLine); 
    }                
    in.close();
    List<String> message = new ArrayList<>();
    message.add(response.toString());           
}

1 Ответ

0 голосов
/ 24 июня 2019

Если это весь ваш код, то ваша проблема может быть такой же простой, как тот факт, что вы не делаете какой-либо вызов для завершения запроса ..., чтобы сообщить HttpURLConnection, что вы закончили формирование запроса ихочу это завершить.Для этого можно сделать две вещи:

  1. закрыть поток вывода, когда вы закончите запись в него.Вы обычно должны это делать.Здесь вы можете позвонить output.close().Более того, поскольку у вас уже есть блок try / catch, используйте конструкцию «try with resources», чтобы убедиться, что поток закрыт независимо от того, что происходит (при условии, что вы используете более новую версию Java, которая поддерживает это).

  2. сделать какой-то вызов, чтобы запросить ответ на запрос.Может случиться так, что запрос не будет отправлен полностью, пока вы не сделаете это.Попробуйте позвонить httpCon.getResponseCode() внизу вашего кода.

Учитывая, что вы не предоставили никакой информации о том, что означает "это не работает с кодом Java", это может быть полезной информацией, ноне окончательное решение вашей проблемы.Ваш код выглядит хорошо, если не считать этих упущений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...