如何在所有用户 post 的每个图像文件名前添加 URL link?
How can I add a URL link before each filename of all user post that is an image?
我正在使用 React.js 和 Springboot 构建一个 full-stack 应用程序,该应用程序从用户那里获取图像并允许他们为该图像命名并 post 它作为用户 post,例如:
用户图片:myImage.jpeg 和标题:这是 myImage 的标题
我已经成功创建了一个 API 允许将其存储在我的数据库中,如下面我的 UserPost table:
我正在使用 AWS S3 存储桶来存储图像文件。在同一个应用程序中,每个用户都有一个个人资料,其中包含用户个人资料图像和个人资料卡的横幅图像。我创建了一个允许此功能的 API,但是,目前,我需要通过连接到我的 S3 存储桶的特定 URL link 加载每个用户的特定个人资料图像和横幅。以下是对演示用户配置文件的 GET 请求示例。
如您所见,个人资料图像和横幅的文件名都已存储 ,然后添加到每个重建的末尾 URL link分别在 profile_img_complete 和 profile_banner_complete 中,每个 link 包含图像以便可以看到。我能够完成 GET 请求 API 方法,以便将每个个人资料图像和横幅文件名添加到重建的 link 中以供查看,如我 UserProfileController
中的以下方法所示 class:
@GetMapping("/profile")
public UserProfile profile(Model model, HttpServletRequest request) {
final String authHeader = request.getHeader(AUTH_HEADER);
String username = null;
String jwt = null;
if (authHeader != null && authHeader.startsWith("Bearer")) {
jwt = authHeader.substring(7);
username = jwtUtils.getUserNameFromJwtToken(jwt);
}
//Load logged in Username from JWT Token obtained
UserDetailsImpl customUser = (UserDetailsImpl) userDetailsService.loadUserByUsername(username);
Long userId = customUser.getId();
UserProfile userProfile = userProfRepo.findByUserId(userId);
model.addAttribute("profile_img", userProfile.getProfile_img_complete());
model.addAttribute("profile_banner", userProfile.getProfile_banner_complete());
return userProfile;
}
最后三行代码在此函数中非常重要,因为它是 URL link 使用 model.addAttribute
重建的地方,因此 links 在用户查看自己的个人资料卡时被拉出时可以正确查看图像。所以现在我已经解释了我是如何使用重建的 link 提取图像的,让我最后解释一下我的用户 posts(不是用户配置文件)的问题。
正如我所说,我希望用户 post 一张图片并让他们为该图片加上标题。提交用户 post 后,我希望将其存储在我的数据库中(完成此操作),然后我希望所有用户的所有 post 显示在我的 Web 应用程序的特定页面上,这就是我迫切需要帮助的地方。我需要想办法将每个 post 的“post_image”列中的文件名添加到 link,这将是 post_img_complete
在我的请求 body.到目前为止,这是我在我的 UserPostController 中尝试过的:
@GetMapping("/list")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public List<UserPost> post(Model model) {
List<UserPost> allUserPosts = userPostRepo.findAllByOrderByIdDesc();
model.addAttribute("post_image", allUserPosts.getPost_img_complete()); // Error here: Cannot resolve method 'getPost_img_complete' in 'List'
return allUserPosts;
}
这是我的 UserPost 实体 class(使用 JPA + Hibernate),它包含我的 getPost_img_complete() 方法和 URL link 我在说:
package com.Application.models;
import javax.persistence.*;
@Entity
@Table(name = "user_posts")
public class UserPost {
@Id
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private UserProfile user;
@Column(name = "title")
private String title;
@Column(name = "post_image")
private String postImage;
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public UserProfile getUser() {
return user;
}
public void setUser(UserProfile user) {
this.user = user;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPostImage() {
return postImage;
}
public String getPost_img_complete() {
return " https://bucket.s3.us-east-2.amazonaws.com/" + postImage;
}
public void setPostImage(String postImage) {
this.postImage = postImage;
}
}
我知道这可能不是提取存储在 S3 存储桶中的图像的最有效方法,但这是我目前正在做的事情。所以对于eachposts文件名,我需要将其添加到getPost_img_complete中URLlink的末尾以供查看这样所有 post 都可以在加载页面时查看图像。我认为这可能与我这次使用列表这一事实有关,而之前我没有使用列表(在我上面显示的用户配置文件示例中)。如果有人能帮助我理解我需要做什么才能实现这一点,那将是一个巨大的帮助。抱歉花了这么长时间才说到重点,我只是想包含有关我的问题的上下文的正确信息。在此先感谢,如有必要,我会添加任何有助于我解决此问题的信息。
你不能做 model.addAttribute("post_image", allUserPosts.getPost_img_complete());
因为 allUserPosts
是一个列表。
尝试遍历它:
List<UserPost> allUserPosts = userPostRepo.findAllByOrderByIdDesc();
allUserPosts.forEach(post -> model.addAttribute("post_image", post.getPost_img_complete()));
我正在使用 React.js 和 Springboot 构建一个 full-stack 应用程序,该应用程序从用户那里获取图像并允许他们为该图像命名并 post 它作为用户 post,例如:
用户图片:myImage.jpeg 和标题:这是 myImage 的标题
我已经成功创建了一个 API 允许将其存储在我的数据库中,如下面我的 UserPost table:
我正在使用 AWS S3 存储桶来存储图像文件。在同一个应用程序中,每个用户都有一个个人资料,其中包含用户个人资料图像和个人资料卡的横幅图像。我创建了一个允许此功能的 API,但是,目前,我需要通过连接到我的 S3 存储桶的特定 URL link 加载每个用户的特定个人资料图像和横幅。以下是对演示用户配置文件的 GET 请求示例。
如您所见,个人资料图像和横幅的文件名都已存储 ,然后添加到每个重建的末尾 URL link分别在 profile_img_complete 和 profile_banner_complete 中,每个 link 包含图像以便可以看到。我能够完成 GET 请求 API 方法,以便将每个个人资料图像和横幅文件名添加到重建的 link 中以供查看,如我 UserProfileController
中的以下方法所示 class:
@GetMapping("/profile")
public UserProfile profile(Model model, HttpServletRequest request) {
final String authHeader = request.getHeader(AUTH_HEADER);
String username = null;
String jwt = null;
if (authHeader != null && authHeader.startsWith("Bearer")) {
jwt = authHeader.substring(7);
username = jwtUtils.getUserNameFromJwtToken(jwt);
}
//Load logged in Username from JWT Token obtained
UserDetailsImpl customUser = (UserDetailsImpl) userDetailsService.loadUserByUsername(username);
Long userId = customUser.getId();
UserProfile userProfile = userProfRepo.findByUserId(userId);
model.addAttribute("profile_img", userProfile.getProfile_img_complete());
model.addAttribute("profile_banner", userProfile.getProfile_banner_complete());
return userProfile;
}
最后三行代码在此函数中非常重要,因为它是 URL link 使用 model.addAttribute
重建的地方,因此 links 在用户查看自己的个人资料卡时被拉出时可以正确查看图像。所以现在我已经解释了我是如何使用重建的 link 提取图像的,让我最后解释一下我的用户 posts(不是用户配置文件)的问题。
正如我所说,我希望用户 post 一张图片并让他们为该图片加上标题。提交用户 post 后,我希望将其存储在我的数据库中(完成此操作),然后我希望所有用户的所有 post 显示在我的 Web 应用程序的特定页面上,这就是我迫切需要帮助的地方。我需要想办法将每个 post 的“post_image”列中的文件名添加到 link,这将是 post_img_complete
在我的请求 body.到目前为止,这是我在我的 UserPostController 中尝试过的:
@GetMapping("/list")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public List<UserPost> post(Model model) {
List<UserPost> allUserPosts = userPostRepo.findAllByOrderByIdDesc();
model.addAttribute("post_image", allUserPosts.getPost_img_complete()); // Error here: Cannot resolve method 'getPost_img_complete' in 'List'
return allUserPosts;
}
这是我的 UserPost 实体 class(使用 JPA + Hibernate),它包含我的 getPost_img_complete() 方法和 URL link 我在说:
package com.Application.models;
import javax.persistence.*;
@Entity
@Table(name = "user_posts")
public class UserPost {
@Id
@Column(name = "id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
private UserProfile user;
@Column(name = "title")
private String title;
@Column(name = "post_image")
private String postImage;
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public UserProfile getUser() {
return user;
}
public void setUser(UserProfile user) {
this.user = user;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getPostImage() {
return postImage;
}
public String getPost_img_complete() {
return " https://bucket.s3.us-east-2.amazonaws.com/" + postImage;
}
public void setPostImage(String postImage) {
this.postImage = postImage;
}
}
我知道这可能不是提取存储在 S3 存储桶中的图像的最有效方法,但这是我目前正在做的事情。所以对于eachposts文件名,我需要将其添加到getPost_img_complete中URLlink的末尾以供查看这样所有 post 都可以在加载页面时查看图像。我认为这可能与我这次使用列表这一事实有关,而之前我没有使用列表(在我上面显示的用户配置文件示例中)。如果有人能帮助我理解我需要做什么才能实现这一点,那将是一个巨大的帮助。抱歉花了这么长时间才说到重点,我只是想包含有关我的问题的上下文的正确信息。在此先感谢,如有必要,我会添加任何有助于我解决此问题的信息。
你不能做 model.addAttribute("post_image", allUserPosts.getPost_img_complete());
因为 allUserPosts
是一个列表。
尝试遍历它:
List<UserPost> allUserPosts = userPostRepo.findAllByOrderByIdDesc();
allUserPosts.forEach(post -> model.addAttribute("post_image", post.getPost_img_complete()));