web-dev-qa-db-fra.com

curl: (26) n'a pas pu ouvrir le fichier

J'obtiens cette erreur, lorsque j'essaie d'appeler une API de boîte via curl.

curl: (26) couldn't open file

Vous ne trouvez pas pourquoi! J'appelle cette API avec un nom de fichier correct -

curl https://upload.view-api.box.com/1/documents \
-H "Authorization: Token YOUR_API_TOKEN" \
-H "Content-type: multipart/form-data" \
-F file=@A_correct_file_name

J'ai vu les trois questions déjà posées, mais 2 d'entre elles sont sans réponse et une est spécifique à Facebook.

l'erreur cURL 26 n'a pas pu ouvrir le fichier

Erreur fatale: exception CurlExcc Uncaught: 26: impossible d'ouvrir le fichier "" renvoyé

Obtention d'une erreur fatale non capturée CurlException: 26: impossible d'ouvrir le fichier

18
halkujabra

Désolé les gars! Ma faute. Je n'avais pas inclus l'extension du fichier dans le nom du fichier. Après l'avoir inclus, cela a fonctionné. Je réponds à cela au cas où quelqu'un ferait la même erreur à l'avenir.

11
halkujabra

J'avais un problème similaire après être passé à PHP 5 (J'utilisais le @ méthode de téléchargement et elle était obsolète, j'ai donc dû commencer à utiliser CURLFile), et la solution à mon problème a été trouvée dans ce pile .

Solution: le téléchargement curl ne fonctionnera pas avec chemins relatifs, utilisez plutôt le chemin complet

27
Guilherme Salomé

J'avais ce problème ce matin mais j'ai résolu ce problème

fileUpload=@\"file, with comma .txt\"

Vous devez donc mettre des guillemets autour du nom du fichier si vous avez des virgules dans le nom du fichier (\ ")

3
Luis Cruz

Pour mon cas, l'utilisation du chemin relatif n'a pas fonctionné. Mais le changer en chemin absolu le corrige.

Cela a échoué

curl -i -X POST -H "Content-Type: multipart/form-data" \
    -F "file=@~/Downloads/xxx.csv" http://localhost:6708/upload

Cela a fonctionné

curl -i -X POST -H "Content-Type: multipart/form-data" \
    -F "file=@/Users/myself/Downloads/xxx.csv" http://localhost:6708/upload
3
Edmund Lee

J'ai eu un problème similaire avec des chemins relatifs comme @Guilherme aussi. J'exécutais mon script bash avec:

bash test/script.sh

Cependant, mon fichier était au même niveau de répertoire que le script bash et non le répertoire test (d'où j'appelais bash), donc le script n'a pas pu trouver mon fichier.

Solution pour moi:
1. cd dans/test et exécutez bash script.sh à partir de là
2. Utiliser des chemins absolus

2
Kevin

Luis Cruz a raison: des guillemets sont requis autour du nom de fichier, mais je devais utiliser le mot-clé 'file', pas 'fileUpload', comme cela est indiqué dans la question.

curl -X GET \
-H 'Content-Type: multipart/form-data' \
-F file=@"/path/to/file.ext" \ 
'http://Host:port/path/to/dir'
0
Gapmeister66