1
votes

I'm having a hard time adding a attachments in my azure devops repo via api...

public static void putAttachments(Integer id) {
        try {
            URL url = new URL(
                    "https://dev.azure.com/marcoparra0034/AgileFr/_apis/wit/attachments?api-version=5.1&fileName=imageAs.png");
            HttpURLConnection con = ResApiMain.apiConnectionAttachments(PAT, url);
            File file = new File("C:\\Users\\marco.parra\\Pictures\\Screenshots\\new.png");
            String base64Image = encodeFileToBase64Binary(file);

//                  String jsonInputString = "[{\"op\":\"add\",\"path\":\"/fields/System.Title\",\"value\":\"" + "tpain"
//                          + "\"}]";
            base64Image = "[" + base64Image + "]";
            System.out.println("Base xs" + base64Image);

            try (OutputStream os = con.getOutputStream()) {
                byte[] input = Base64.decodeBase64(base64Image.getBytes("utf-8"));
                System.out.println(new String(input));
                os.write(input, 0, input.length);
            } catch (Exception ex) {
                System.out.println(ex.getMessage());
            }

            try (BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"))) {
                StringBuilder response = new StringBuilder();
                String responseLine = null;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
                System.out.println(response.toString());
            } catch (Exception ex) {
                System.out.println(ex.getMessage());
            }
            con.disconnect();
        } catch (Exception ex) {

        }

This is the connection method

public static HttpURLConnection apiConnectionAttachments(String PAT, URL url) {
        HttpURLConnection con = null;
        try {
            String AuthStr = ":" + PAT;
            Base64 base64 = new Base64();

            String encodedPAT = new String(base64.encode(AuthStr.getBytes()));
            con = (HttpURLConnection) url.openConnection();
            con.setRequestProperty("Authorization", "Basic " + encodedPAT);
            con.setDoOutput(true);
            System.out.println("URL - " + url.toString());
            System.out.println("PAT - " + encodedPAT);

            // Image Requierements
//          con.setRequestProperty("Content-Type", "image/jpeg");
            con.setDoInput(true);
            con.setUseCaches(false);
            con.setRequestProperty("X-HTTP-Method-Override", "PATCH");
            con.setRequestMethod("POST");

            con.setRequestProperty("Content-Type", "application/octet-stream");
//      con.setRequestProperty("Accept", "application/json");

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return con;
    }

When i run this it show the next error code

Server returned HTTP response code: 405 for URL: https://dev.azure.com/marcoparra0034/AgileFr/_apis/wit/attachments?api-version=5.1&fileName=imageAs.png

Update i see how to work with python and c# but i can´t follow this logic to create an attachment

https://github.com/Microsoft/azure-devops-python-api/blob/1bacd2a3f0128a6d184cf75e2c6f8859d46f270a/vsts/vsts/work_item_tracking/v4_1/work_item_tracking_client.py#L56

Expectations Example

{
  "id": "a5cedde4-2dd5-4fcf-befe-fd0977dd3433",
  "url": "https://dev.azure.com/fabrikam/_apis/wit/attachments/a5cedde4-2dd5-4fcf-befe-fd0977dd3433?fileName=imageAsFileAttachment.png"
}

https://docs.microsoft.com/en-us/rest/api/azure/devops/wit/attachments/create?view=azure-devops-rest-5.1

Any help would be appreciated....

1
I solve this issue commenting line con.setRequestProperty("X-HTTP-Method-Override", "PATCH");M.Parra
Glad to know your have resolved your question, would you mind convert your comment to the answer, This can be beneficial to other community members reading this thread and fins the answer more easier.Leo Liu-MSFT

1 Answers

1
votes

I solve this issue commenting line con.setRequestProperty("X-HTTP-Method-Override", "PATCH");