users@glassfish.java.net

JSF 2.2 upload and GlassFish directory

From: Antonio Goncalves <antonio.mailing_at_gmail.com>
Date: Sun, 15 Sep 2013 22:52:38 +0200

Hi all,

Environment : Java SE 7 / Mac OS X / GlassFish 4.0.1-b03.

I want to use the new JSF 2.2 file upload to upload mp4 videos and then be
able to watch them with an HTML5 <video> tag. The JSF page uses the new
<h:inputFile> as follow :

<h:form enctype="multipart/form-data">
    <h:inputFile value="#{talkBean.video}"/>
    <h:commandButton value="Upload video" action="#{talkBean.upload}"/>
</h:form>

The backing bean uses the Part interface. The upload method writes the MP4
file using the write method :

public class TalkBean implements Serializable {

    private Talk talk;
    private Part video;

    public String upload() throws IOException {
        video.write( talk.getId() + ".mp4");
        return null;
    }

The problem with the write method is that the file is stored under the
temporary directory :
$GLASSFISH_HOME/glassfish/domains/domain1/generated/jsp/sampleJSFVideo. If
I try to change the file location :

video.write("*/Users/antoniombp/Documents/*" + talk.getId() + ".mp4");

GlassFish throws an exception because it concats both directories :

java.io.FileNotFoundException:
/Users/antoniombp/Tools/Software/GlassFish/glassfish-4.0.1-b03/glassfish/domains/domain1/generated/jsp/sampleJSFVideo*/Users/antoniombp/Documents/*1002.mp4
(No such file or directory)


Only if I navigate down through the directories I manage to change
locations :

video.write("*../../../*" + talk.getId() + ".mp4");


But the final question really is where do I upload my MP4 files so I can
view them from my web application ?

Thanks
Antonio