我有一个名为“Bga”的实体,它有一个图像列表。我试图创建一个Bga,通过JSON发送数据,在同一个请求中,我想上传一个图像,这样我可以级联它,数据库中的表“Image”将具有来自Bga的外键,Bga将具有其图像列表。
我正在做的事情:
发送多部分表单:在此处输入图像描述
其中包含来自实体Bga的JSON数据:在此处输入图像描述
第二条是我上传的图片
我可以创建Bga并单独上传图像,但我不知道如何以级联的方式实现。
POST请求:
@PostMapping
@ResponseBody
public ResponseEntity<Bga> createBga(@RequestPart("bga") Bga bga, @RequestPart("file") MultipartFile file) throws IOException {
fileStorage.save(file);
bgaRepository.save(bga);
return ResponseEntity.status(HttpStatus.OK).body(bga);
}
然后是上传图像的服务:
@Service
public class FileStorageService {
@Autowired
private ImagemRepository imagemRepository;
public Imagem save(MultipartFile file) throws IOException {
String fileName = StringUtils.cleanPath(file.getOriginalFilename());
Imagem Imagem = new Imagem(fileName, file.getContentType(), file.getBytes());
return imagemRepository.save(Imagem);
}
}
我将JPA存储库用于这两个方面
实体Bga:
import java.io.Serializable;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="BGA")
public class Bga implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id_bga;
private String nome;
private int num_bga;
@OneToMany(mappedBy = "bga", cascade = CascadeType.ALL)
private List<Imagem> imagens;
public Bga() {
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getNum_bga() {
return num_bga;
}
public void setNum_bga(int num_bga) {
this.num_bga = num_bga;
}
public long getId_bga() {
return id_bga;
}
public void setId_bga(long id_bga) {
this.id_bga = id_bga;
}
public List<Imagem> getImagens() {
return imagens;
}
public void setImagens(List<Imagem> imagens) {
this.imagens = imagens;
}
和实体图像:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
@Entity
public class Imagem {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id_imagem;
private String name;
private String type;
@Lob
private byte[] imagem;
@ManyToOne
@JoinColumn(name = "id_bga", referencedColumnName = "id_bga")
private Bga bga;
public Imagem() {
}
public Long getId_imagem() {
return id_imagem;
}
public void setId_imagem(Long id_imagem) {
this.id_imagem = id_imagem;
}
public byte[] getImagem() {
return imagem;
}
public void setImagem(byte[] imagem) {
this.imagem = imagem;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Imagem(String name, String type, byte[] imagem) {
this.name = name;
this.type = type;
this.imagem = imagem;
}
public Bga getBga() {
return bga;
}
public void setBga(Bga bga) {
this.bga = bga;
}
但我做Bga的方式并没有得到上传的图像:
在此处输入图像描述
如何做到这一点,我可以级联它,所以表图像将有一个外键来自bga?
小心事务边界。您希望1个事务存储文件BGA,因此:
fileStorage.save(file)
和bgaRepository.save(bga)
,然后在Imagem上设置bga扩展您的文件存储服务以同时获取Bga对象:
@Service
public class FileStorageService {
@Autowired
private ImagemRepository imagemRepository;
@Autowired // NEW
private BgaRepository bgaRepository; // NEW
@Transactional // NEW
public Imagem save(Bga bga, MultipartFile file) throws IOException {
String fileName = StringUtils.cleanPath(file.getOriginalFilename());
Imagem Imagem = new Imagem(fileName, file.getContentType(), file.getBytes());
bgaRepository.save(bga); // NEW
Imagem.setBga(bga); // NEW
return imagemRepository.save(Imagem);
}
}
在控制器中,仅使用两个DTO调用1个服务:
@PostMapping
@ResponseBody
public ResponseEntity<Bga> createBga(@RequestPart("bga") Bga bga, @RequestPart("file") MultipartFile file) throws IOException {
fileStorage.save(bga, file); // NEW: passing in 'bga' here
// bgaRepository.save(bga); .. DELETED
return ResponseEntity.status(HttpStatus.OK).body(bga);
}
我得到以下错误 响应数据为空。我做错了什么,或者我在代码中遗漏了什么?
我试图在ajax调用中发布json请求,但我没有收到来自请求的任何成功响应。 请找到我下面的代码:我在这里做错了什么: 它击中了网址,我得到200确定状态,但它总是出错条件... 有人能帮忙吗,我需要改变什么工作: 我尝试了data:JSON. stringify({key:"value", key1:"value e1"})-但这也没有帮助
有人知道使用发布JSON的正确方法吗? 我从服务器得到响应。它使用Chrome工作。
问题内容: 我想将我的网址发送到(和)。 我当前的请求代码不起作用。 使用是 不是 一个容易回答。 问题答案: 在iOS中发送和请求非常容易。无需其他框架。 请求: 首先,将我们的(按需发送的内容)创建为,然后将其转换为。 目标 接下来,我们阅读的,因此我们可以将其传递给请求。 现在我们有了要发布的内容,我们可以创建一个,并包含我们的。 迅速 最后,我们可以发送请求,并通过创建新的请求来阅读回复:
我是一名服务器端开发人员,学习vanilla JS的诀窍。我需要澄清我的概念,即为我在JS中创建的图像对象发送Ajax POST请求——这个问题与此有关。 想象一下一个网络应用,用户上传照片供他人查看。在上传每个图像时,我使用vanilla JS确认图像的mime类型(通过解释幻数),然后调整图像大小以达到优化目的。 调整大小后,我会: 返回的图像对象必须通过Ajax请求发送到后端。比如: 然而,
问题内容: 我正在尝试发出POST请求,但无法完成。另一端什么也没收到。 这是应该如何工作的吗?我知道该功能,但我想我不能使用它,因为它不能用测试,对吗? 问题答案: 您基本上有正确的想法,只是发送错误的表格。该表格属于请求的正文。