java - Springboot文件上传发生并且数据保存在数据库中但给出500错误
问题描述
我有一个有用户@entity 的类。其中有一张需要更新的个人资料图片,当我通过@Query 图像名称更新时,我也可以在文件夹中看到图像。但是在我的 API 中,我有一个 imageName 返回,所以我可以进行同步更改。奇怪的部分是当我上传图像时,图像也会上传到文件夹和数据库中,但会抛出 500 错误。以前从未见过这种情况。任何帮助将不胜感激。
POJO类
@Entity
@Table(name="users")
public class Users {
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "firstname")
private String firstName;
@Column(name = "lastname")
private String lastName;
@Id
@Column(name = "username")
private String username;
@Column(name = "email")
private String email;
@Column(name = "role")
private String role;
@Column(name = "profile_picture")
private String profilePicture;
}
头像类
public class ProfilePicture {
private MultipartFile profileImage;
private String profileImageName;
}
存储库
public interface ProfileRepository extends JpaRepository<Users, String> {
@Query(value = "UPDATE users SET profile_picture = :saveImage WHERE username = :username", nativeQuery = true)
public String updateUserProfilePictureForUsername(@Param("saveImage") String saveImage, @Param("username") String username);
}
服务:
public void saveProfileImage(ProfilePicture saveImage, String username) {
String imageName = saveImage.getProfileImageName();
profileRepo.updateUserProfilePictureForUsername(imageName, username);
}
REST API
@PostMapping(path = "/uploadprofileimage")
@ResponseStatus(HttpStatus.CREATED)
public String uploadProfilePicture(@RequestParam("image") MultipartFile Imagefile, @RequestParam("username") String username) throws IOException {
String profileImageName = Imagefile.getOriginalFilename();
ProfilePicture profileImage = new ProfilePicture();
String fileFolderPath = "/Users/Desktop/Documents/" + username + /ProfilePictures/";
File filePath = new File(fileFolderPath);
if (!filePath.exists()) {
filePath.mkdirs();
}
File file = new File(fileFolderPath, profileImageName);
profileImage.setProfileImageName(profileImageName);
profileImage.setProfileImage(Imagefile);
profileImage.getProfileImage().transferTo(file);
profileService.saveProfileImage(profileImage, username);
return profileImage.getProfileImageName();
}
这是使用 Lambda 表达式的解决方案。
public Users saveProfileImage(ProfilePicture saveImage, String username) {
String imageName = saveImage.getProfileImageName();
return profileRepo.findById(username).map( user -> {
user.setProfilePicture(imageName);
return profileRepo.save(user);
}).orElseThrow(() -> new ResourceNotFoundException("Something went wrong "));
}
解决方案
推荐阅读
- linux - 如何从 github repo 创建一个 linux shell 命令?
- php - codeigniter 4 电子邮件未发送
- android - Android Studio 和 Gradle:“构建失败,出现异常。”
- python - Python中phi(k)相关矩阵的简单代码
- flutter - 如何在不点击的情况下显示颤振搜索文本字段
- asynchronous - 如何使用 rlua-async 执行异步 lua 代码?
- python - 我不明白这个布尔逻辑
- python - KeyError:运行 dataframe.loc 时出现 124
- javascript - 在带有对象的嵌套数组中过滤
- python-3.x - 如何创建一个 swagger:response 生成二进制应用程序/pdf 文件?