我尝试将文件上传到Spark Api并使用以下命令:
after((Filter) (request, response) -> {
response.header("Access-Control-Allow-Origin", "*");
response.header("Access-Control-Allow-Methods", "POST");
});
post("/scene", (request, response) -> {
Path tempFile = Files.createTempFile(uploadDir.toPath(), "", "");
request.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement("/temp"));
try (InputStream is = request.raw().getPart("uploaded_file").getInputStream()) {
Files.copy(is, tempFile, StandardCopyOption.REPLACE_EXISTING);
DAOIntf dao = new DAO(tempFile.toAbsolutePath().toString(),"map.xml");
Scene scene = dao.getXmlScene();
return new Gson().toJson(scene);
}catch (Exception e){
return e;
}
});
通过使用像这样的React应用程序获取:
handleFileChange(e) {
e.preventDefault();
let fileInput = document.getElementsByName("uploaded_file")[0];
fetch(apiAddress, {
method: 'POST',
body: fileInput.files[0]
}).then( (res) => {
return res.json()
}).then( (res) => {
this.props.onFileChange(JSON.stringify(res));
});
}
我知道API正在运行,因为我在普通的html中使用了一个简单的表单。所以我猜这个问题与我如何构建有效载荷有关。
我在服务器日志中收到404和此消息的方式是:
INFO spark.http.matching.MatcherFilter - 请求的路径[/ scene]尚未在Spark中映射
这是我发送的包裹
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: es-ES,es;q=0.9,en;q=0.8,en-GB;q=0.7
Access-Control-Request-Headers: content-type
Access-Control-Request-Method: POST
Connection: keep-alive
Host: localhost:4567
Origin: http://localhost:3000
Referer: http://localhost:3000/
- UPDATE-- 我正在使用此组件来激活呼叫:
render(){ return (
<form>
<input type='file' name='uploaded_file' ref={input => {
this.fileInput = input;
}}/>
<button onClick={this.handleFileChange}>Upload</button> </form> ) }
如果我在不选择文件时使用它,我会在服务器中获得OK 200和javax.servlet.ServletException: Content-Type != multipart/form-data
异常。沟通是有效的。现在还不是什么问题。