2010-07-19 10 views
0

Je construis une API simple qui télécharge des fichiers à partir d'un CDN tiers (Cloud Files). ColdFusion obtient actuellement ce fichier avec succès et en utilisant CfContent et cfheader, le fichier est disponible au téléchargement et la personne qui a appelé l'API. Le problème que j'ai est que ces fichiers sont des fichiers sécurisés, donc je ne peux pas utiliser un lien direct vers le CDN, et ces fichiers peuvent aller de 50 Mo à 5 Go. Donc, à cause de ces deux questions, quand je reçois le fichier à partir du CDN en utilisant cfhttp, puis faireColdFusion CDN Télécharger

<cfcontent type="MMIETYPE" variable="#CFHTTP.FileContent#" > 

Im confus comme si ColdFusion agit comme un serveur milieu où ça devient le fichier en bits de la CDN et en le transmettant à l'utilisateur, OU télécharge-t-il le fichier entier en mémoire, puis le diffuse à l'utilisateur.

Si c'est le cas, comment puis-je le faire agir comme serveur intermédiaire? L'utilisation de cfhttp télécharge le fichier en utilisant

+1

Tirer des fichiers à partir d'un CDN via votre serveur défaites à peu près au point d'un CDN. À ce stade, il serait plus facile, plus rapide et (probablement) moins cher d'obtenir suffisamment de stockage local pour les envoyer directement depuis le lecteur. @Tyler Christianson a raison: si vous utilisez un CDN, utilisez-le correctement. –

Répondre

3

Il n'y a pas beaucoup de recours pour cacher l'URI pour le CDN sans télécharger le fichier et le réapprovisionner à l'utilisateur final.

La plupart des utilisateurs finaux ne pourront pas savoir où se trouve le fichier si vous utilisez les codes d'état HTTP 301 ou 302.

301 est une redirection permanente et 302 est une redirection temporaire. La différence étant que certains navigateurs mettent en cache les 301 afin que l'utilisateur n'ait plus à toucher votre serveur s'il demande l'URI une seconde fois.

Vous pouvez le faire simplement

<cfheader statuscode="301" statustext="Moved permanently" /> 
<cfheader name="Location" value="#CDN_URI#" /> 
<cfabort /> 

ou

<cfheader statuscode="302" statustext="Moved Temporarily" /> 
<cfheader name="Location" value="#CDN_URI#" /> 
<cfabort /> 

Vous pouvez également utiliser cflocation, qui utilise par défaut un 302, mais peut aussi être utiliser un autre code d'état en utilisant l'attribut statusCode .

http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_j-l_04.html

+0

En outre, l'utilisation de CFHTTP pour télécharger le fichier sur votre serveur CF, puis CFContent pour le retransmettre à l'utilisateur, lie un thread pendant la durée du téléchargement que ColdFusion utiliserait pour traiter les demandes. Si votre site connaît une charge élevée, vous risquez de manquer de threads. –

+0

Je voudrais juste utiliser CFLOCATION, au lieu d'écrire les en-têtes moi-même. Plus facile, moins de code, plus lisible, même résultat. –

+0

Oui, j'ai effectivement rencontré le problème du manque de threads. –