2013-07-25 9 views
1

Nous créons un formulaire permettant aux utilisateurs de télécharger des fichiers volumineux. Sur les appareils mobiles et les connexions lentes, le téléchargement peut prendre un certain temps, il semble donc important de le traiter par un appel AJAX qui montre aux utilisateurs une barre de progression (ou quelque chose pour leur faire savoir qu'il fonctionne toujours).Téléchargement de fichier AJAX avec variables de requête secrètes

Voici le problème: Le point final pour le téléchargement est une API tierce qui attend notre clé API secrète comme l'un des paramètres. Voici un lien directement vers the section in their documentation. Cette clé API ne peut pas être exposée aux utilisateurs du côté client. Mon premier instinct est de soumettre le formulaire à un script PHP intermédiaire sur notre site, qui a la clé API, puis télécharge le fichier dans l'API. Mais je suis presque sûr que cela signifiera le téléchargement du fichier deux fois: une fois sur notre serveur. Puis à nouveau de notre serveur vers le point de terminaison API. Même si le formulaire est envoyé avec AJAX, ce n'est pas un bon résultat pour l'utilisateur d'attendre deux fois plus longtemps.

Donc: Quelle est la meilleure façon de permettre aux utilisateurs de télécharger des fichiers tout en gardant notre clé API en toute sécurité?

Quelques détails qui peuvent être importants ou non:
Notre site est une application web PHP basée sur le framework CakePHP (v2.x). Les fichiers téléchargés sont des fichiers vidéo de tous les différents formats entre 1 et 5 minutes. L'API est une société appelée Wistia (voir le lien vers les documents ci-dessus). Les tailles de fichier semblent aller de 3-30MB. Nous n'avons aucune possibilité de changer la façon dont fonctionne l'API tierce.

+0

Comment devez-vous transmettre le paramètre à l'API? Par PHP? Par Javascript en tant que param dans une URL? Je n'ai pas très clair pourquoi devrait-il être public et pas caché dans le côté PHP. – Alvaro

+0

La requête Ajax sera envoyée directement à la 3ème partie? – Pieter

+0

@Alvaro J'ai ajouté le lien aux options d'autorisation dans leurs documents. – emersonthis

Répondre

0

Le téléchargement deux fois ne devrait pas être un problème - devrait-il?

Depuis votre serveur jusqu'à leur API - c'est ce à quoi servent les serveurs et les API - échange de données.

Javascript n'est pas fait pour cela.

+0

Le téléchargement deux fois est très bien, mais faire l'uploader attendre deux fois plus longtemps pour télécharger un gros fichier sur une connexion lente est un bummer. Je ne peux pas vraiment stocker les fichiers et les mettre en file d'attente pour le téléchargement vers l'API car l'API effectue une certaine validation qui doit être transmise à l'utilisateur au moment du téléchargement. – emersonthis

+0

Effectuez une deuxième tâche de transfert du serveur vers l'API. Pas besoin que l'utilisateur en soit conscient. –

+0

C'est exactement le genre de chose qui m'intéresse. Je n'ai jamais fait ça avant. Pourriez-vous expliquer un peu comment cela pourrait fonctionner? – emersonthis

0

Il n'y a aucun moyen de le cacher sur le client, donc votre premier instinct était correct - vous devrez transférer le fichier du serveur.

0

Il devrait être possible de lire le post-flux brut à partir de l'entrée php: //, vous pouvez obtenir le fichier téléchargé à partir de là (si vous pouvez l'analyser :)) et commencer le téléchargement sur le serveur api immédiatement. Mais même si la communication entre votre appareil mobile et votre script est lente, votre script sera probablement envoyé rapidement vers le serveur API. Alors est-ce vraiment nécessaire?

+0

Je suis très intéressé d'en savoir plus sur la lecture du post-flux brut. Je ne l'ai jamais fait auparavant. Pouvez-vous donner un exemple de cela? Ou un lien vers quelque chose? – emersonthis

+0

Maintenant, j'ai découvert que cela ne fonctionne pas pour multipart/form-data. – Marek

Questions connexes