Je travaille sur un projet qui permettra le téléchargement de fichiers volumineux (GB +) via HTTP PUT et je dois implémenter une méthode pour reprendre le téléchargement. Une fois qu’un fichier est téléchargé et finalisé, il est complet et ne peut plus être modifié. Jusqu’à présent, j’ai deux options en tête, mais aucune ne correspond parfaitement:
Option 1
Le client envoie une demande HEAD initiale sur le fichier qui renverra 404 s’il n’existe pas ou les détails du fichier, y compris la taille actuelle, ainsi qu’un en-tête X HTTP sur les lignes de X-Can-Resume
ou quelque chose comme Le fichier peut être repris et un en-tête Range
spécifiant les octets dont il dispose. Cela semble correct, mais je ne suis pas enthousiasmé par le X-Header car il supprime de la norme HTTP.
Option 2
Le client envoie une demande PUT avec un en Content-Length
tête Content-Length
de 0 octet et aucun corps, le serveur peut alors renvoyer un 308 Resume Incomplete
(comme proposé ici http://code.google.com/p/gears/wiki/ResumableHttpRequestsProposal ) ou un en-tête 202 Accepted
pour indiquer s’il faut reprendre ou recommencer depuis le début. Cela semble également acceptable en dehors de l’utilisation d’un en-tête non standard.
D’autres suggestions sur la meilleure façon de mettre en œuvre cela?
Merci J
Dans les deux solutions, il n’existe pas d’implémentations client et serveur, donc je suppose que vous coderez les deux. Je pense que vous devriez juste trouver un juste équilibre entre le plus simple et ce qui est décrit dans la proposition de Gears (en passant, vous savez probablement que Gears est mort), et être prêt à changer quand une norme apparaîtra.
Si je devais implémenter cette fonctionnalité, je permettrais au client de télécharger des morceaux et j’appendais un résumé de message sur tout le contenu et les morceaux.