Question

Je sais que ce type de questions existent dans SF, mais ils sont très spécifiques, il me faut une suggestion générique. J'ai besoin d'une fonction pour le téléchargement de fichiers utilisateur qui pourrait être de taille plus que 1 Go. Cette fonctionnalité sera un complément à l'actuel téléchargement de fichier présent dans la fonction application qui répond à des fichiers plus petits. Maintenant, voici quelques-unes des options

  1. Utiliser HTTP et applet Java. Envoyez les fichiers en morceaux et les rejoindre sur le serveur. Mais comment étrangler le n / p.
  2. Utiliser HTTP et l'application Flex. Est-il mieux qu'une compatibilité applet de navigateur et WRT 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.

De plus, j'ai vous assurer que ce processus de téléchargement ne compromettent pas la tâche d'autres utilisateurs ou autrement dit ne mangent pas de b d'autres utilisateurs / w. Tout mécanisme qui peut être fait au niveau de n / w pour étranglent ces processus?

En fin de compte client voulait

pour avoir FTP en option. Mais je pense que la réponse avec la gestion des fichiers est aussi très cool programme.

Était-ce utile?

La solution

Pour l'envoi de fichiers sur un serveur, à moins que vous Vous pour utiliser le protocole HTTP, FTP est le chemin à parcourir. Étranglant, je ne suis pas complètement sûr, du moins pas un programme.

Personnellement, il semble que les limites de la vitesse de téléchargement serait mieux accompli sur le côté serveur bien.

Autres conseils

Utilisez ce langage côté client que vous souhaitez (une application Java, Flex, etc.), et appuyez sur le serveur avec HTTP PUT (pas Flex) ou POST. Dans le côté serveur code Java, réguler le flux d'octets dans votre boucle de flux d'entrée. A brut, simple, extrait de l'échantillon qui limite la bande passante à pas plus rapidement que la moyenne <= 10 Ko / s:

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é on pourrait régler plus précisément la bande passante de flux unique, mais il devient complexe lorsque l'on considère buffers et autres. « 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 les fichiers dans les 100s de Mo tous les jours et nous avons testé jusqu'à 2 Go. (Au-delà de 2 Go il y a les problèmes embêtants Java int primitifs à traiter.) Nos clients sont à la fois Flex et curl. Il fonctionne pour moi, il peut travailler pour vous.

Alors que FTP est grand et tout, vous pouvez éviter beaucoup (mais pas tous) les problèmes de pare-feu en utilisant HTTP.

Si vous voulez réduire la bande passante que vous pouvez envoyer les données compressées (à moins que son déjà compressé) Cela peut économiser 2-3 fois le volume de données en fonction de ce que vous envoyez.

Pour un exemple de bonne pratique pour le téléchargement de gros fichiers, et les différentes façons de l'aborder, un coup d'oeil à flickr.com (vous pouvez avoir à vous inscrire pour accéder à la page Uploader)

Ils offrent diverses options, y compris le téléchargement du formulaire HTTP, un client de bureau java, ou une sorte de gadget javascript conduit-que je ne peux pas comprendre tout à fait. Ils ne semblent pas utiliser le flash partout.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top