使用AngularJS + SparkJava读取multipart / form

时间:2016-12-28 14:03:08

标签: angularjs java-8 multipartform-data embedded-jetty spark-java

我在AngularJS 1.5和服务器端有一个使用sparkjava 2.5的客户端 我有一个post方法来发送一个包含json和附件的表单 当我尝试在服务器端阅读它时,我就是不能。我尝试了在互联网上搜索过的所有内容,并且无法找到一种方法来阅读它。 发生了什么:

在客户端,我尝试了这种方法:

this.createNew = function(file) {
 var file = $scope.newDurability.file
 var fd = new FormData();
 fd.append('file', file);
 fd.append('data', angular.toJson($scope.newDurability));
 $http.post(postURL, fd, {
 headers: {
  'Content-Type': undefined
  },
 transformRequest: angular.identity,
 params: {
  fd
 }
});

在sparkjava中,我尝试使用他们在网页中提供的代码来阅读multipart / form-data:

post("/durability", "multipart/form-data", (req, res) -> {
req.raw().setAttribute("org.eclipse.jetty.multipartConfig",
                        new MultipartConfigElement("/tmp"));
                Collection<Part> parts = req.raw().getParts();
...

但是部件始终是空的。

此外,当我阅读请求的正文(String body = req.body();)时,我明白了:

------WebKitFormBoundaryrMxfw31B1kgNNhNz
Content-Disposition: form-data; name="file"; filename="Toggl_time_entries_2016-09-01_to_2016-09-30.pdf"
Content-Type: application/pdf
...file binary data...

------WebKitFormBoundaryhHoLHo9P2qmbSNYK
Content-Disposition: form-data; name="data"

{"equipment":"gloves","material":[{"text":"latex"}],"days":1}
------WebKitFormBoundaryhHoLHo9P2qmbSNYK--

执行以下操作时,所有内容都为空或为空:

Set<String> attributes = req.attributes();
QueryParamsMap queryMap = req.queryMap();
Set<String> queryParams = req.queryParams();
Map<String, String> params = req.params();

当我尝试通过将密钥(对我尝试的密钥并不重要)传递给这些函数来获取数据时也是如此。例如: String params2 = req.params("data"); String parameter = req.raw().getParameter("data");

所以问题是: 我究竟做错了什么?我猜客户端是正确的,因为请求发送显然是正确的,所以我的假设是有一些技巧与sparkjava使它工作。或者,有一种技巧可以发送表单数据,使sparkjava能够正确地解释表单,并且我将能够读取这些部分。

0 个答案:

没有答案