Bonjour, je rencontre une difficulté à upload une image dans une sous-tâche Asana
Est-ce que je dois d’abord upload l’image sur mon serveur ?
Voici le code :
$filename = $_FILES['file']['name'];
$curlfinalname = '@' . realpath ($filename);
$curl2 = curl_init();
$data_array2 = '{
"data": {
"file": "'.$curlfinalname.'"
}
}';
$CURLHTTPHeader2 = array(
"Content-Type: multipart/form-data",
'Authorization: Bearer token');
curl_setopt($curl2, CURLOPT_POST, 1);
curl_setopt($curl2, CURLOPT_URL, 'https://app.asana.com/api/1.0/tasks/'.$result_id.'/attachments');
curl_setopt($curl2, CURLOPT_HTTPHEADER, $CURLHTTPHeader2);
curl_setopt($curl2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl2, CURLOPT_POSTFIELDS, $data_array2);
$result2 = curl_exec($curl2);
Merci d’avance pour votre aide.
Bonjour @anon58190593 et bienvenue!
Je suis désolée d’apprendre que vous rencontrez ce problème.
Afin de comprendre d’où vient le problème, pouvez-vous me confirmer que les images font moins de 100Mb et que vous les téléchargez depuis votre ordinateur et non depuis un service tiers ?
Vous pouvez consulter cet article sur le téléchargement via l’API: Upload an attachment
Je vous recommande également de consulter notre Forum des
développeurs et des API : Developers & API - Asana Community Forum
L’upload d’image via l’API est trèèèèèèès compliqué, j’ai mis un moment avant d’y arriver. J’ai du code en nodeJS qui le fait si jamais ça peut aider…
Bonjour Bastien , je veux bien s’il te plait. Merci
Bonjour, les images font bien moins de 100mb.
J’ envoi les images dans un formulaire en Ajax. Je récupère ensuite les images en PHP $_FILES.
Est-ce que je dois d’abord les héberger sur mon serveur et ensuite donner le chemin pour les héberger sur Asana ?
Merci d’avance pour votre réponse.
Pas besoin de les héberger, mais la syntaxe est difficile. Je partage le code dès que j’ai un moment.
1 Like
Je stocke mes images en base64, et j’utilise cette méthode pour transformer en fichier avant envoi
base64ToFile(dataurl, filename) {
const arr = dataurl.split(',')
const mime = arr[0].match(/:(.*?);/)[1]
const bstr = atob(arr[1])
let n = bstr.length
const u8arr = new Uint8Array(n)
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new File([u8arr], filename, {type: mime})
}
et voilà la fonction d’envoi
const formData = new FormData()
const file = this.base64ToFile(fileAsBase64, filename)
formData.append('file', file)
return this.http.post(`https://app.asana.com/api/1.0/tasks/${taskGid}/attachments`, formData,
{
headers: {
'Authorization': 'Bearer ' + localStorage.getItem('access_token')
}
}).pipe(map(ret => new Attachment(ret)))
Pas si dur au final
1 Like
Oula je ne comprends pas grand chose à vrai dire.
De plus je dois le traduire en php.
Mais merci
Le plus important c’est d’avoir le endpoint appelé, le header passé et le fait qu’on utilise un formData
. Je ne peux pas aider davantage ! (sauf à en faire une prestation où je le code pour vous)
1 Like