如何在所有用户 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()));