6
votes

Avoir un problème lors du téléchargement d'un fichier en utilisant la disposition de contenu

Je veux que mon programme ait une fenêtre contextuelle sauvegarder sous Option de fenêtre avant le téléchargement de fichier, toutefois, lorsque j'exécute mon servlet, il commence automatiquement à télécharger le fichier. Qu'est-ce que je manque ici? XXX


17 commentaires

Je crois que c'est du côté du serveur. Vous essayez de propager un événement de serveur au côté client.


Jetez un oeil à: Stackoverflow.com/Questtions/3802510/... et Stackoverflow.com/questions/2226192/... Cordialement


@ Danilomuñoz: aussi vite que je peux voir au-dessus de deux scénarios sont une forme différente de la mine..mais merci de préoccupation


Qu'en est-il de votre client? Navigateur, application autonome / desktop, ...


@ Danilomuñoz: Oui, c'est autonome / bureau. Je faisais cela juste pour la pratique. Je ne trouve rien de mal avec mon code cependant.


Comment appelez-vous votre servlet?


@Helloworld fournir des informations supplémentaires comme comment accédez-vous à votre servlet et où exécutez-vous le servlet


Dupliquer possible de Stackoverflow.com/Questtions/15483637/...


@ user23123412: Je n'appelle pas mon servlet, il suffit de l'exécuter à Eclipse.


@Sankrish: Je n'accède pas à mon servlet nulle part de côté.


@shekharsuman qui n'est pas une option dupliquée.


Cela semble être une application Web, pas une application autonome / desktop. Si tel est votre cas, définissez simplement le type de contenu comme "Application / octère-flux" qui est le type de contenu générique du téléchargement de fichier (quel que soit son type).


@LUGIGIGIMENDOZA: Faire le type de contenu "Application / Octet-Stream" n'a également pas réparer mon problème ... J'ai essayé.


Ensuite, je ne comprends pas quel est votre problème exact. Veuillez fournir plus d'informations sur ce que vous faites, comment vous exécutez le code et la manière dont votre application va la consommer.


Bien ! Ceci est mon tout code, sauf que je n'ai pas fourni le nom de la classe parce que ce n'était pas nécessaire (je suppose), et je suis en cours d'exécution par code dans Eclipse en cliquant avec le bouton droit de la souris et Exécuter comme -> Exécuter sur serveur . Ce qui se passe ici, le MP3 devient automatiquement le téléchargement que je ne veux pas. Je dois aborder une boîte sauf d'abord, c'est tout ça.


Votre programme n'est pas de bureau / autonome, car il s'agit d'un servlet en cours d'exécution sur un serveur. Le client enregistre les informations que vous avez envoyées et non votre programme. Voir ma réponse complète ci-dessous.


"Qu'est-ce que je manque ici" Code Dome pour apparaître la fenêtre. Qu'est-ce qui vous fait penser que cela devrait arriver automatiquement?


4 Réponses :


-1
votes

Vous devez mettre en œuvre la boîte de dialogue manuellement, par ex. ( http://docs.oracle.com/javase/ 7 / DOCS / API / JAVAX / SWING / JFILECHOOSER.HTML ). Après avoir sélectionné le fichier, vous pourrez démarrer le téléchargement de la demande HTTP (à votre servlet) et enregistrer le fichier sur le chemin souhaité.


0 commentaires

2
votes

Essayez d'être consulté ici: http://www.java2s.com/ Code / java / swing-jfc / démonstrationoffiledialogboxes.htm

Sortez l'énoncé principal dans leur code et mettre exécuté (nouveau fichier FILECHOOserest (), 250, 110); dans votre propre code. Si je le faisais, je ferais un INT nommé Savestatus et 3 des finales égales 0, 1 et 2 nommé attente , Enregistrer , et Annuler . Ensuite, je ferais une boucle de temps dans votre autre programmation pour voir si Savestatus était égal à attendre pour mettre en pause votre programme (mais pas la boîte de dialogue). Ensuite, je ferais une déclaration IF pour voir si Savestatus était égal à Enregistrer . Si oui, téléchargez-le, et sinon, ne le faites pas. Simple comme ça.


0 commentaires

6
votes

Votre programme n'est pas de bureau / autonome, car il s'agit d'un servlet en cours d'exécution sur un serveur. Lorsque vous l'exécutez dans Eclipse en cliquant avec le bouton droit de la souris sur Exécuter sous -> Exécutez sur le serveur , Eclipse ouvre réellement une page Web pour afficher les résultats. Par conséquent, votre programme est maintenant une application Web et Eclipse (ou la page qu'il s'ouvre) est le client . Le client enregistre les informations que vous avez envoyées et non votre programme. Obtenu?

L'en-tête dispositionné de contenu est là uniquement pour suggérer le nom de fichier du téléchargement. Les paramètres du navigateur définissent si cela ouvre une fenêtre Save sous ou non. Vous ne pouvez pas contrôler cela.

Par exemple, dans Google Chrome, dans Paramètre / Réglage avancé / Téléchargements , il y a l'option Demandez où enregistrer chaque fichier avant de télécharger . Seulement si cette option est sélectionnée, il ouvrira la boîte de dialogue souhaitée. Sinon, il l'enregistrera dans un emplacement par défaut (également défini dans les paramètres du navigateur). Des options similaires existent pour tous les navigateurs.

Veuillez également noter que, selon l'en-tête Type de contenu , le navigateur essaiera de Afficher le contenu, et non Télécharger . Par exemple, le navigateur essaiera d'afficher des textes et HTML. Mais alors vous pouvez force le téléchargement en réglant l'en-tête sur un type non afficable:

réponse.setContentType ("application / octet-flux");

Si vous ne souhaitez pas créer une application Web: puisque votre programme s'exécute sur un Server , il envoie simplement les informations et est effectuée. C'est le programme qui décide de quoi faire avec elle. Dans votre cas présent, le client est un navigateur (ou Eclipse ouvrant une page de navigateur). Des en-têtes tels que l'en-tête Content-Disposition sont destinés aux navigateurs. Si vous souhaitez créer votre propre client (Swing Client, Android App, l'application iPhone) qui n'est pas un navigateur, le client recevra les informations du serveur et décidera de quoi faire avec elle (l'afficher ou l'enregistrer dans n'importe quel manière), même en ignorant les en-têtes HTTP.


0 commentaires

2
votes

Votre problème est le type MIME. Certains types (en particulier ceux où un gestionnaire spécifique est connu) seront téléchargés directement par la plupart des navigateurs. Il aide un peu à utiliser Application / Binary, mais même quelques navigateurs pourraient être configurés pour le télécharger ou interpréter l'extension de nom de fichier dans le gestionnaire de disposition.

Je pense que la plupart des solutions utilisent JavaScript sur la page avant le lien de téléchargement.


0 commentaires