【问题标题】:How can i get object from session?如何从会话中获取对象?
【发布时间】:2016-01-15 19:47:52
【问题描述】:

正如标题所说,我想问一下如何从会话中获取对象?

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

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();

对不起,如果我的问题很愚蠢:(

【问题讨论】:

    标签: java session playframework-2.0


    【解决方案1】:

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

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

    您不需要单独的模型,例如,如果您保存用户的头像,只需将两个字段添加到 Users 模型 - avatarNameavatarPath,都作为 String .

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

    关于会话:

    documentation 会话存储中所示,Strings - 即:session("connected") 包含“已登录”用户的电子邮件。当然,这是一个非常简单的示例,在现实世界中它应该得到更好的保护。

    一般来说,在会话中,您需要存储 User 对象的一些唯一键,最好不能逆向工程或猜测该键,例如,它可以是与用户对象一起存储的一些随机散列.从会话中读取该哈希后,您可以通过此键找到用户,等等!

    【讨论】:

    • 谢谢。我明白你在说什么。但是我仍然想回答我如何从会话“Admin”中获取对象“Admin”(会话是字符串---对吗?)
    【解决方案2】:

    这是您想要做的一个简单示例。 不过我同意 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);
    %>
    

    【讨论】:

    • 看来您的代码将创建新对象。我想更新存储在我的数据库中的“Admin”对象。
    • “Admin”对象的数据结构是什么?此示例仅说明如何将对象设置为会话。对于您的情况,您可以使用 getAttribute 从会话中获取“Admin”对象,设置 Photo 对象然后将其放回。
    猜你喜欢
    • 1970-01-01
    • 2014-08-05
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 2019-05-12
    相关资源
    最近更新 更多