Busboy で奇妙な問題が発生しています。Invoke-RestMethod を使用して PowerShell から Node.js で記述されたリモート サーバーにファイルをアップロードしています。ストリーム関数を使用すると、コードは問題なく動作します。バイナリ データを受け入れ、問題なくファイルをローカル ドライブに書き込みます。ただし、Busboy を使用すると、「境界エラーが見つかりません」と表示されます。この問題を解決するために、境界を Invoke-RestMethod に渡します。これで境界エラーは解消されますが、Busboy はファイル イベントをまったく起動しません。私は頭をかいて、すでに2日間理解しようとしてきましたが、解決策は私にはわからないようです. 数週間前はまったく同じコードが問題なく動作していましたが、もう動作しません。作業環境に変更が加えられたかどうかはわかりませんが、非常に奇妙です。
ストリーム コード: これは問題なく動作します
サーバーコード
fs = require('fs');
server = restify.createServer();
server.post('/file',restify.queryParser(),uploadFile);
function uploadFile(req, res, next) {
var wstream = fs.createWriteStream("x.jpg");
req.pipe(wstream);
}
パワーシェル
$upload= Invoke-RestMethod -Uri "http://localhost:8088/file" -Method Post -InFile $imagePath -ContentType 'multipart/form-data'
Busboy コード: これにより Missing Boundary エラーがスローされます
サーバーコード
fs = require('fs');
server = restify.createServer();
server.post('/file',restify.queryParser(),uploadFile);
function uploadFile(req, res, next) {
var fileStream = new BusBoy({ headers: req.headers });
}
パワーシェル
$upload= Invoke-RestMethod -Uri "http://localhost:8088/file" -Method Post -InFile $imagePath -ContentType 'multipart/form-data'
境界が設定され、Node.js コードが変更された Powershell コード。「オンファイル」は呼び出されません。
パワーシェル
$begin = @"
---BlockBoundary---
"@
$end = @"
---BlockBoundary---
"@
Add-Content 'RequestBodySavedToFile' $begin
$imageData = Get-Content $imagePath -Raw -Encoding Byte
Add-Content 'RequestBodySavedToFile' $imageData -Encoding Byte
Add-Content 'RequestBodySavedToFile' $end
$url = "http://localhost:8088/file"
$contentType = "multipart/form-data; boundary=$begin"
$upload= Invoke-RestMethod -Uri $url1 -Method Post -InFile "RequestBodySavedToFile" -ContentType $contentType
サーバーコード
fs = require('fs');
server = restify.createServer();
server.post('/file',restify.queryParser(),uploadFile);
function uploadFile(req, res, next) {
var fileStream = new BusBoy({ headers: req.headers });
req.pipe(fileStream);
fileStream.on('file', function(fieldname, file, filename, encoding, mimetype) {
console.log('File [' + fieldname + ']: filename: ' + filename + ', encoding: ' + encoding + ', mimetype: ' + mimetype);
res.end();
});
}
これの原因は何ですか?すべてのご意見に感謝します。