【发布时间】:2016-08-18 04:08:33
【问题描述】:
我有multipart/form-data,我要发布到一个快速端点/data/upload,在下面形成标记:
form(enctype="multipart/form-data", action="/data/upload", method="post")
input(type="file", name="data")
我正在使用busboy 读取文件流,它工作正常。从那里,我想使用request npm 模块再次将流作为multipart/form-data 发送到第二个Java 后端。 JS 客户端/Java 服务器代码如下:
req.busboy.on('file', function (fieldName, fileStream, fileName, encoding, mimeType) {
var reqBody = {
url: server.baseURL + 'api/data',
headers: {
'Connection': 'keep-alive',
'Content-Type': 'multipart/form-data'
},
formData: {
file: fileStream
}
};
request.post(reqBody, function (err, r, body) {
// Do rendering stuff, handle callback
});
});
Java 端点(api/数据)
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void addData(FormDataMultiPart formDataMultiPart) {
// Handle multipart data here
}
我不认为我在这里以multipart/form-data 的形式正确发送文件...但我很难弄清楚如何在不阅读的情况下将流从busboy 直接通过管道传输到request /从客户端的临时文件写入。有什么想法吗?
Java 堆栈跟踪:
Apr 27, 2016 5:07:12 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 3 * Server has received a request on thread qtp1631904921-24
3 > POST http://localhost:8080/api/data
3 > Connection: keep-alive
3 > Content-Length: 199
3 > Content-Type: multipart/form-data; boundary=--------------------------331473417509479560313628
3 > Host: localhost:8080
Apr 27, 2016 5:07:12 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 3 * Server responded with a response on thread qtp1631904921-24
3 < 400
17:07:13.003 [qtp1631904921-24] WARN org.eclipse.jetty.http.HttpParser parseNext - bad HTTP parsed: 400 No URI for HttpChannelOverHttp@425137da{r=1,c=false,a=IDLE,uri=null}
Rahat 建议的更改:
31 var reqBody = {
32 url: server.baseURL + 'data',
33 headers: {
34 'Connection': 'keep-alive',
35 'Content-Type': 'multipart/form-data'
36 }
37 };
38
39 req.pipe(req.busboy.pipe(request.post(reqBody)));
抛出错误:
Error: Cannot pipe. Not readable.
at Busboy.Writable.pipe (_stream_writable.js:154:22)
【问题讨论】:
-
您正在重新定义
req。这是故意的吗? -
变量名的选择很差,但不成问题。我会在上面的帖子中更改它。
-
您是否考虑过通过管道将您的
busboy连接到您的 java 端点? -
您有代码 sn-p 或文档链接吗?谢谢--
-
请添加java异常的堆栈跟踪
标签: javascript java node.js express multipartform-data