读标题时,我想问一下如何从会话中获取对象?
我正在尝试上传并将图像保存在对象中。登录后,(相同的用户名和密码)我将用户设置在会话中,
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();
如果我的问题很愚蠢,那就嘲笑:(
答案 0 :(得分:0)
将上传的文件存储在数据库中并非最佳选择,因为它通常非常昂贵。而只是将图像保存在文件系统上,然后将其路径保存为常见的String
。
当然你应该确保有唯一的文件名以避免覆盖其他上传,所以检查是否。 myphoto.jpg
不存在,只是将新文件重命名为myphoto_01.jpg
,myphoto_02.jpg
等。您还可以在每次上传时为文件名添加一些时间戳,这样您就不需要了检查文件名是否唯一。
如果您保存用户的头像,只需向Users
模型中添加两个字段 - avatarName
,avatarPath
,则不需要单独的模型。两者都是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);
%>