Comment écrire un fichier dans le dossier resource / images de l'application?
Je voudrais télécharger une image et la stocker sur le serveur, et plus tard de h:graphicImage? Je tiens à le stocker dans "ressources/images" de l'application. Je suis à l'aide de glassfish 4. Maintenant, le fichier passe à "domain1\généré\jsp\FileUpload". Merci
Mon formulaire
<h:form id="form" enctype="multipart/form-data">
<h:messages/>
<h:panelGrid columns="2">
<h:outputText value="File:"/>
<h:inputFile id="file" value="#{uploadPage.uploadedFile}"/>
</h:panelGrid>
<br/><br/>
<h:commandButton value="Upload File" action="#{uploadPage.uploadFile}"/>
</h:form>
Mon haricot
@Named
@ViewScoped
public class UploadPage {
private Part uploadedFile;
public void uploadFile(){
File file = File.createTempFile("somefilename-", ".jpg", new File("C:\\var\\webapp\\images"));
uploadedFile.write(file.getAbsolutePath());
}
}
source d'informationauteur Pavel
Vous devez vous connecter pour publier un commentaire.
Non, merci de ne pas. La GUERRE de déployer l'espace n'est pas destiné comme permanente dans l'emplacement de stockage du fichier. Tous ces fichiers téléchargés se perd à chaque fois que vous redéployer la webapp pour la raison très simple qu'ils ne sont pas contenus dans la première GUERRE. Voir pour une explication élaborée également cette réponse très étroitement liés à la question: Image téléchargée uniquement disponible après l'actualisation de la page.
Parce que vous avez spécifié un chemin relatif dans
Part#write()
. Il devient relatif au répertoire de travail courant qui vous n'avez aucun contrôle sur. Voir pour une explication élaborée également cette réponse: getResourceAsStream() vs FileInputStream. Vous devez spécifier un chemin d'accès absolu, en d'autres termes, commencer le chemin avec/
.Étant donné que vous êtes à l'aide de Glassfish, la réponse dans Image téléchargée uniquement disponible après l'actualisation de la page devrait aussi le faire pour vous. En un mot:
Créer un
/var/webapp/images
dossier. Notez que ce chemin est juste exemplaire et totalement libre de vos choix. Notez également que lorsque vous utilisez Windows avec unC:\
disque, alors ce chemin est équivalent àC:\var\webapp\images
.Enregistrer le fichier téléchargé.
(note:
Files#createTempFile()
est utilisé pour générer automatiquement un nom de fichier unique, sinon précédemment téléchargé le fichier écrasé lors de la nouvelle fichier téléchargé (par hasard) a exactement le même nom de fichier)Dire GlassFish pour vous inscrire à un hôte virtuel sur
/var/webapp/images
de sorte que tous les fichiers sont disponibles surhttp://example.com/images
par adjonction de l'article suivant/WEB-INF/glassfish-web.xml
de la webapp:(note:
alternatedocroot_1
doit être exactement comme cela, garder intactes, si vous en avez plusieurs, nom ilalternatedocroot_2
etc; notez aussi que l'/images
partie devrait en effet pas être inclus dansdir
attribut, ce n'est pas une faute de frappe)Maintenant, vous pouvez l'afficher comme suit:
(remarque: utilisez
value
attribut, pasname
attribut)N'était pas en mesure de le faire fonctionner avec
Path#write
dans glassfish, j'ai donc utiliséPath#getInputStream
comme suit: