Ajouter une pièce Jointe à Jira via l'API REST
Je suis en train de poster une pièce jointe o JIRA à l'aide de la dernière API REST.
Voici mon code:
public boolean addAttachmentToIssue(String issueKey, String path){
String auth = new
String(org.apache.commons.codec.binary.Base64.encodeBase64((user+":"+pass).getBytes()));
Client client = Client.create();
WebResource webResource = client.resource(baseURL+"issue/"+issueKey+"/attachments");
FormDataMultiPart formDataMultiPart = new FormDataMultiPart();
File f = new File(path);
if(f.exists() && f.isFile()){
FileInputStream fis = null;
try {
fis = new FileInputStream(f);
} catch (FileNotFoundException e) {
return false;
}
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
try {
for (int readNum; (readNum = fis.read(buf)) != -1;) {
bos.write(buf, 0, readNum); //no doubt here is 0
}
fis.close();
bos.close();
} catch (IOException ex) {
try {
fis.close();
bos.close();
} catch (IOException e) {
return false;
}
return false;
}
byte[] bytes = bos.toByteArray();
FormDataBodyPart bodyPart = new FormDataBodyPart("file", new ByteArrayInputStream(bytes), MediaType.APPLICATION_OCTET_STREAM_TYPE);
formDataMultiPart.bodyPart(bodyPart);
}else{
return false;
}
ClientResponse response = null;
response = webResource.header("Authorization", "Basic " + auth).header("X-Atlassian-Token", "nocheck").type(MediaType.MULTIPART_FORM_DATA).accept("application/json").post(ClientResponse.class, formDataMultiPart);
System.out.println(response);
int statusCode = response.getStatus();
System.out.println(statusCode);
String resp = response.getEntity(String.class);
System.out.println(resp);
return true;
}
Cependant, je reçois la réponse suivante:
POST http://localhost:8082/rest/api/2/issue/TEST-2/attachments returned a response status of 404 Not Found
404
XSRF check failed
Un Problème avec la clé de TEST-2 n'existe pas dans mon local instance JIRA et je peux ajouter la pièce jointe "à la main" dans le Tableau de l'application elle-même.
Je sais que je dois ajouter un en-tête de type "X-Atlassian-Jeton:nocheck" pour prévenir XSRF, mais à la sortie, je dois être en train de faire quelque chose de mal..
Ce qui me confond encore davantage, c'est que sur une page 404 est levée après la XSRF échec de la vérification.
J'ai récupéré google pour obtenir des réponses, sans succès
Quelqu'un peut spéculer à ce que je fais mal?
Pas vraiment, j'ai essayé, mais, tenant compte du fait que j'ai beaucoup trop de dépendances dans mon projet actuel, en ajoutant plus provoque une certaine confusion dans le classpath. Ma seule alternative pour faire de la poste par moi-même
OriginalL'auteur Nuno Neto | 2013-09-05
Vous devez vous connecter pour publier un commentaire.
J'ai réussi à résoudre le problème en utilisant le client http apache
Pour qui peut avoir le même problème, voici le code:
Salut @KannanLg, quelle solution avez-vous utiliser pour transmettre une URL que l'envoi de paramètre pour ajouter la pièce jointe? Avez-vous été en mesure de télécharger un site web hébergé par fichier? Merci à l'avance.
OriginalL'auteur Nuno Neto
@Nuno Neto, je suis surpris de votre méthode de travail, comme il manque quelques éléments-clés dans la FileBody. Mise à jour de la Confluence de l'API? Plus important encore, le fichier de commentaires, et le codage. Comme c'était le cas, votre exemple va lancer une 500, mais pour les nouvelles personnes qui viennent dans ce, via Google le code ci-dessous en fait.
La différence majeure serait:
J'ai aussi ajouté un petit peu de logique pour vider le fichier de commentaires.
Ah, totalement pourrait comment cela s'est passé ensuite :). Merci pour la mise à jour 🙂
OriginalL'auteur 0X29A