将文件上传到Spark API端点

时间:2018-04-12 17:46:14

标签: javascript java rest fetch spark-java

我尝试将文件上传到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异常。沟通是有效的。现在还不是什么问题。

0 个答案:

没有答案