Java 弹簧&x2B;无法两次上载同一文件

Java 弹簧&x2B;无法两次上载同一文件,java,angular,spring,typescript,spring-boot,Java,Angular,Spring,Typescript,Spring Boot,无法上载同一文件两次。如果上传不同的文件,它的工作 chrome中的网络错误 { timeStamp: ......, status: 417 error: 'Bad Request', message: 'Required request part 'file' is not present' path: 'url as hosted on Tomcat' } Spring Boot Controller.java文件 @PostMapping("/Post") public R

无法上载同一文件两次。如果上传不同的文件,它的工作

chrome中的网络错误

{ timeStamp: ......, status: 417
  error: 'Bad Request',
  message: 'Required request part 'file' is not present'
  path: 'url as hosted on Tomcat'
}
Spring Boot Controller.java文件

@PostMapping("/Post")
public ResponseEntity<String> handleFileUpload(@RequestParam("file") 
MultipartFile file){ String Message=""; try .......(and so on)}

我哪里出错了?

你的问题听起来像是浏览器缓存,第一次请求通过,第二次发生了不同的事情。如果这是问题的根源,那么您可以尝试将随机查询参数附加到POST URL的末尾,例如

var url = 'url as hosted on TOMCAT';
url = url + (new Date()).getTime();

是的,将查询参数绑定到POST请求似乎很奇怪,但不应该有任何东西阻止您这样做。理想情况下,这足以禁用浏览器缓存。

我确信问题是由输入字段上的更改侦听器引起的,该侦听器不会对同一文件再次启动,并且您在第一次提交后将
this.data
设置为null

您需要通过“手动”重置字段:

这可能不是最好的选择与角度。 或通过重置表单:

onSubmit() {
    // upload the file ...
    this.uploadForm.reset();
}

第二次将请求复制为curl并粘贴,Devtools->Networks->右键单击请求->复制为curl@TimBiegeleisen-我也知道这个问题,但不知道解决办法。问题:angular只查看更改,因此当上传的文件没有更改时,它不会更改work@TimBiegeleisen它的棱角5@PierreDuc-是的,对不起,我很抱歉,我做了一些更改,例如将selectFile替换为File&onSubmit。我能够发送不同的文件到服务器,但当我试图上传同一个文件多次,我得到错误的HTTP400@Olivia我只能想象您在代码中的某个地方再次将
this.data
设置为未定义。您可以做的最好的事情是检查network request(网络请求)选项卡,查看发送到服务器的内容。比较第一个请求和第二个请求,看看有什么不同。您当然可以在UI端将URL更改为您想要的任何内容。这包括添加一个可能被服务器忽略的查询参数。我将保留此答案,以防它对您的问题的其他读者有所帮助。好的,但在我的情况下,服务器出现404错误,这意味着URL无法识别:(那么可能Spring Boot认为额外的查询参数意味着不同的URL资源。糟糕。没有解决方法:-(添加问号可能有效,使其成为
url+='?'+Date.now()
var url = 'url as hosted on TOMCAT';
url = url + (new Date()).getTime();
onSubmit() {
    // upload the file ...
    document.getElementById("selectFile").value = "";
}
onSubmit() {
    // upload the file ...
    this.uploadForm.reset();
}