1

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

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

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

如何将此图片保存到 Admin 中?

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

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

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

4

2 回答 2

0

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

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

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

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

关于会话:

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

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

于 2013-08-21T04:08:25.753 回答
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);
%>
于 2013-08-21T05:07:43.360 回答