Glassfish - przesyłanie zdjęć - robi to dobrze

Jestem na najnowszej glassfish (3.1.2) - więc nie ma potrzeby apache FileItem i nie ma błędów z getPart (). Czytałem, że najlepszą praktyką przy przesyłaniu obrazów jest zapisywanie ich w systemie plików (patrztutaj na przykład). Edytuję już istniejący kod - śmierdzący - więc miałem pomysł, aby to zrobić:

Part p1 = request.getPart("file");
System.out.println("!!!!!P1 : " + p1);

Drukuje:

!!!!!P1 : File name=DSC03660.JPG, 
StoreLocation=C:\_\glassfish3\glassfish\domains\domain1\generated\jsp\elkethe\upload_7cb06306_138b413999a__7ffa_00000000.tmp, 
size=2589152bytes, isFormField=false, FieldName=file

nowe linie moje. W kodzie ludzie robią:

if (request.getParameter("crop") != null) {
    // get path on the server
    String outputpath = this.getServletContext().getRealPath(
            "images/temp/" + session.getId() + ".jpg");
    // store photo
    InputStream is = p1.getInputStream();
    createPhoto(is, outputpath);
    session.setAttribute("photo_path", "images/temp/" + session.getId()
            + ".jpg");
    response.sendRedirect("cropping");
    return;
}

Gdzie

private void createPhoto(InputStream is, String outputpath) {
    FileOutputStream os = null;
    try {
        os = new FileOutputStream(outputpath);
        // write bytes taken from uploaded file to target file
        int ch = is.read();
        while (ch != -1) {
            os.write(ch);
            ch = is.read();
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        Helpers.close(os);
    }
}

Teraz dzieje się tak, że plik jest przesyłany do StoreLocation (???) po przesłaniu formularza, więc najwyraźniej to wszystkop1.getInputStream() jest na próżno.

Moje pytania to:

co to jest StoreLocation? W jaki sposób tmp są tymi szklanymi plikami? Gdzie są ustawione wszystkie te parametry? Czytałem BalusC 'seminarium - ale nie ma wzmianki o StoreLocation (google nie jest zbyt pomocnezarówno).Jaki byłby bardziej profesjonalny sposób radzenia sobie z sytuacją - w tym przechowywanie zdjęć poza webrootem - ale przy użyciu urządzeń glassfish zapewnia (jeśli to zapewnia)?Nawet drukowanie p1 tak mi miło ucieka (tak nie jestwydać się przekroczyćtoString())

Zainteresowanych poradami, nawet w jaki sposób należy zmienić nazwy zdjęć itp. (Czy ta sesja jest właściwa? - sprawdź także sztuczkę czasową):

if (request.getParameter("save") != null) {
    long time = System.currentTimeMillis();
    String path = "images/upload/" + session.getId() + time + ".jpg";
    String outputpath = this.getServletContext().getRealPath(path);
    // store photo
    InputStream is = p1.getInputStream();
    createPhoto(is, outputpath);
    // etc
}

questionAnswers(2)

yourAnswerToTheQuestion