반응형
busboy에 문제가 있어 Content-Type을 찾을 수 없다
파이어베이스에서 이미지를 업로드하기 위해 빌드하려는 앱에서 이 버스보이 패키지로 인해 어려움을 겪고 있습니다.같은 문제이지만 코드가 다를 수 있는 몇 가지 가능한 해결책을 이미 찾아봤지만 소용없었다.뭐가 잘못됐는지 알려주실 수 있도록 제 것을 공유해도 될까요?행은 다음과 같습니다.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp()
const path = require('path');
const os = require('os');
const cors = require('cors')({ origin: true });
const BusBoy = require('busboy')
const fs = require('fs');
const gcConfig = {
projectId: 'meeting-scheduler-9cee1',
keyFilename: "meeting-scheduler-9cee1-firebase-adminsdk-3unr4-09df5fe69a.json"
}
const { Storage } = require("@google-cloud/storage");
exports.upLoadFile = functions.https.onRequest((request, response) => {
cors(request, response,() => {
const busBoy = new BusBoy({ headers: request.headers});
let uploadData = null;
if (request.method !== "POST") {
return response.status(500).json({
message: 'Not Allowed!!'
})
}
// if (!request.headers['Content-Type']){
// return next(new Error('Bad request'));
// }
// else
// next();
busBoy.on('file', (fieldname, file, filename, encoding, mimetype) => {
const filepath = path.join(os.tmpdir(), filename);
uploadData = { file: filepath, type: mimetype };
file.pipe(fs.createWriteStream(filepath));
});
busBoy.on('finish', () => {
const bucket = gcs.bucket('meeting-scheduler-9cee1.appspot.com');
bucket
.upload(uploadData.file, {
uploadType: 'media',
metadata: {
metadata: {
contentType: uploadData.type
}
}
})
.then(() => {
response.status(200).json({
message: 'It Works!'
});
})
.catch(err => {
response.status(500).json({
error: err
})
})
});
busBoy.end(request.rawBody);
});
});
내가 파이어베이스 드 에러에 있는 함수는 항상 똑같다.저도 공유하고 있어요.
Error: Missing Content-Type
at new Busboy (/srv/node_modules/busboy/lib/main.js:23:11)
at cors (/srv/index.js:58:24)
at cors (/srv/node_modules/cors/lib/index.js:188:7)
at /srv/node_modules/cors/lib/index.js:224:17
at originCallback (/srv/node_modules/cors/lib/index.js:214:15)
at /srv/node_modules/cors/lib/index.js:219:13
at optionsCallback (/srv/node_modules/cors/lib/index.js:199:9)
at corsMiddleware (/srv/node_modules/cors/lib/index.js:204:7)
at exports.upLoadFile.functions.https.onRequest (/srv/index.js:57:5)
at cloudFunction (/srv/node_modules/firebase-functions/lib/providers/https.js:49:9)
내가 직접 부딪혔어알고 보니 버스보이 모듈의 main.js가content-type
대신Content-Type
헤더는 검출되지 않습니다.main.js(대부분 실행 가능한 솔루션이 아님)에서 케이스를 수정하여 이것이 문제임을 확인하였습니다.그 후 컨스트럭터 콜은 예상대로 제 요청에 대응했습니다.
이전에 이 문제가 제기되었다고 합니다만, 이 문제는 종료(링크)되었습니다.
사용하시는 분postman
다음 문제가 발생합니다.우편 배달원이 언급한 파일이 더 이상 존재하지 않는다는 것을 몰랐습니다.content-type
존재하지는 않았지만postman
불평한 적이 없다.유효한 파일로 전환했더니 작동했어요.
언급URL : https://stackoverflow.com/questions/59520989/having-problems-with-busboy-and-not-finding-content-type
반응형
'programing' 카테고리의 다른 글
정규식을 사용하여 문자열 내의 모든 YouTube 비디오 ID를 찾으려면 어떻게 해야 하나요? (0) | 2023.01.30 |
---|---|
JavaScript에서 불변성이 중요한(또는 필요한) 이유는 무엇입니까? (0) | 2023.01.30 |
Intelij Spring Initializer를 사용할 수 없습니다. (0) | 2023.01.30 |
ES6에 심볼을 도입하는 동기는 무엇입니까? (0) | 2023.01.30 |
어레이 리스트에서 어레이로 (0) | 2023.01.20 |