我正在使用节点 18,我创建了一个将多个文件转发到另一台服务器的功能。这些文件是缓冲区形式,我使用 multipart/form-data。问题总是在发送的每个文件上返回状态 301(重定向)。 谁能帮我修复我的代码?谢谢
转发文件的我的nodeJS函数:
import * as dotenv from 'dotenv';
import * as http from 'http';
import * as url from 'url';
import FormData from 'form-data';
const sendPost = (ticketKey, files, callback, callbackError) => {
const parsedUrl = url.parse('http://localhost'); //
const promises = files.map((file) => {
return new Promise((resolve, reject) => {
const form = new FormData();
form.append('file', file.data, {
filename: file.filename.filename,
contentType: file.mime,
});
const headers= form.getHeaders();
headers['Accept']= 'application/json';
const options ={
hostname: parsedUrl.hostname,
path: parsedUrl.pathname,
redirect: 'follow',
port: 3000,
method: 'POST',
headers: headers,
};
const req = http.request(options, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
console.log('end', res.statusCode);
if (res.statusCode >= 400) {
const error = new Error(`HTTP error ${res.statusCode}`);
reject(error);
} else {
resolve(data);
}
});
});
req.on('error', (error) => {
reject(error);
});
form.pipe(req);
})
.catch((error) => {
return {file: file.filename.filename, error: error.message};
});
});
Promise.all(promises)
.then((results) => {
const errors = results.filter((result) => result.error);
const successes = results.filter((result) => !result.error);
console.log({successes: successes, failed: errors});
callback({successes: successes, failed: errors});
})
.catch((error) => {
callbackError(error);
});
};
export {sendPost};
这是到达接收服务器的内容:
POST request
{
'content-type': 'multipart/form-data; boundary=--------------------------177201756538675985959677',
accept: 'application/json',
host: 'localhost:3000',
connection: 'close',
'transfer-encoding': 'chunked'
}
File [file]: filename: "test2.pdf", encoding: "7bit", mimeType: "application/pdf"
File [file] got 28600 bytes
File [file] done
Done parsing form!