我如何从会话中获取对象?

时间:2013-08-21 03:53:06

标签: java session playframework-2.0

读标题时,我想问一下如何从会话中获取对象?

我正在尝试上传并将图像保存在对象中。登录后,(相同的用户名和密码)我将用户设置在会话中,

session("user",username);

例如,现在,我使用“Admin”登录:

session("user",username); // now my session = Admin

然后我将用户重定向到上传页面。我将这张照片保存为:

  MultipartFormData body = request().body().asMultipartFormData();
  FilePart picture = body.getFile("picture");
  if (picture != null) {
        String fileName = picture.getFilename();
        String contentType = picture.getContentType(); 
        File file = picture.getFile();
        Photo photo1 = new Photo();
        photo.name=fileName;
        photo.path=file.getAbsolutePath();
        photo.save();

如何将此图片保存到管理员?

我知道我必须有一个对象来添加这张照片,如:

Users user = new Users();
Photo photo = new Photo();
photo.name=fileName;
photo.path=file.getAbsolutePath();
user.photo.add(photo1);   //  I added @ManytoOne in Photo.java
photo.save();

如果我的问题很愚蠢,那就嘲笑:(

2 个答案:

答案 0 :(得分:0)

将上传的文件存储在数据库中并非最佳选择,因为它通常非常昂贵。而只是将图像保存在文件系统上,然后将其路径保存为常见的String

当然你应该确保有唯一的文件名以避免覆盖其他上传,所以检查是否。 myphoto.jpg不存在,只是将新文件重命名为myphoto_01.jpgmyphoto_02.jpg等。您还可以在每次上传时为文件名添加一些时间戳,这样您就不需要了检查文件名是否唯一。

如果您保存用户的头像,只需向Users模型中添加两​​个字段 - avatarNameavatarPath,则不需要单独的模型。两者都是String

最后 - 如果您的用户可以保存未知数量的图像,则您显示的单独模型看起来是一个不错的选择。

关于会议:

documentation会话中所示,String s - 即:session("connected")包含“已记录”用户的电子邮件。当然这是非常简单的样本,在现实世界中它应该更好地保护。

通常在会话中,您需要存储User对象的一些唯一键,最好是不应该对该键进行反向工程或猜测,因此可以将一些随机哈希存储在用户对象。从会话中读取该哈希后,您可以通过此键找到用户,etvoilà!

答案 1 :(得分:0)

以下是您想要做的简单示例。 但是我同意biesior不会在会议中存储照片。

用户类

package com.practice;
import java.util.*;

public class User {
    public String name = null;
    public List<Photo> photos = null;

    public User(String name) {
    this.name = name;
    photos = new ArrayList<Photo>();
    }
}

照片课:

package com.practice;

public class Photo {
    public Photo() {}
}

JSP

<%@ page import="com.practice.*" %>
<%
    User admin = new User("admin");
    Photo photo = new Photo();
    admin.photos.add(photo);
    session.setAttribute("admin", admin);
%>