我有multipart/form-data
,我發佈一個Express端點/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 [email protected]{r=1,c=false,a=IDLE,uri=null}
拉哈特推薦的變化:
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端點? –