2009-07-06 7 views
1

Je sais que ce type de questions existe en SF mais elles sont très spécifiques, j'ai besoin d'une suggestion générique. J'ai besoin d'une fonctionnalité pour télécharger des fichiers utilisateur qui pourraient être de plus de 1 Go. Cette fonctionnalité sera un ajout à la fonctionnalité de téléchargement de fichiers existante présente dans l'application qui s'adresse aux fichiers plus petits. Maintenant, voici quelques-unes des optionsSuggestions pour télécharger de très gros fichiers (> 1GB)

  1. Utilisez l'applet HTTP et Java. Envoyez les fichiers en morceaux et joignez-les au serveur. Mais comment étrangler le n/w.
  2. Utilisez l'application HTTP et Flex. Est-il préférable qu'un applet de compatibilité navigateur navigateur & tout autre problème d'environnement?
  3. Utilisez FTP ou plutôt SFTP plutôt que HTTP comme protocole pour le processus de téléchargement plus rapide

S'il vous plaît suggérer.

En outre, je dois m'assurer que ce processus de téléchargement n'entrave pas la tâche des autres utilisateurs ou, en d'autres termes, ne consomme pas les autres utilisateurs. Tous les mécanismes qui peuvent être faits au niveau n/w pour limiter ces processus? En fin de compte client voulait avoir FTP en option. Mais je pense que la réponse avec le traitement des fichiers par programme est également cool.

Répondre

0

Pour envoyer des fichiers à un serveur, à moins que vous avez pour utiliser HTTP, FTP est le chemin à parcourir. Limitation, je ne suis pas complètement sûr, du moins pas par programmation. Personnellement, il semble que les limitations de la vitesse de téléchargement seraient mieux accomplies du côté du serveur.

12

Utilisez la langue côté client souhaitée (application Java, Flex, etc.) et poussez sur le serveur avec HTTP PUT (sans Flex) ou POST. Dans le code Java côté serveur, réglez le flux d'octets dans votre boucle de flux d'entrée. Un brut, simple, extrait de l'échantillon qui limite la bande passante à pas plus vite qu'une < moyenne = 10 Ko/seconde:

InputStream is = request.getInputStream(); 
OutputStream os = new FileOutputStream(new File("myfile.bin")); 
int bytesRead = 0; 
byte[] payload = new byte[10240]; 

while (bytesRead >= 0) { 
    bytesRead = is.read(payload); 

    if (bytesRead > 0) 
     os.write(payload, 0, bytesRead); 

    Thread.currentThread().sleep(1000); 
} 

(Avec plus de complexité pouvait réguler plus précisément la bande passante de flux unique, mais il devient complexe lorsque l'on considère . buffers et comme « assez bien » est généralement assez bon)

Ma demande fait quelque chose de similaire à ce qui précède -. nous réglementons à la fois vers le haut (POST et PUT) et (GET) vers le bas de la bande passante de flux. Nous acceptons tous les jours des fichiers dans les 100 Mo et avons testé jusqu'à 2 Go. (Au-delà de 2 Go, il y a les problèmes primitifs Java intestins à traiter.) Nos clients sont à la fois Flex et curl. Cela fonctionne pour moi, ça peut marcher pour vous. Alors que FTP est excellent et tout, vous pouvez éviter de nombreux problèmes de pare-feu (mais pas tous) en utilisant HTTP.

3

Si vous souhaitez réduire la bande passante, vous pouvez envoyer les données compressées (à moins qu'elles ne soient déjà compressées). Cela peut économiser 2 à 3 fois le volume de données en fonction de ce que vous envoyez.

1

Pour un exemple de bonne pratique pour le téléchargement de fichiers volumineux, et les différentes manières de l'aborder, jetez un oeil à flickr.com (vous devrez peut-être vous inscrire pour accéder à la page d'uploader)

Ils offrent diverses options, y compris le téléchargement de formulaires HTTP, un client de bureau java ou un type de gadget JavaScript que je n'arrive pas à comprendre . Ils ne semblent pas utiliser Flash partout.

Questions connexes