Я пытаюсь загрузить файл с моего сайта реакции в хранилище firebase. Файл хранится в firebase, но не в правильном формате (pdf), и я также не могу открыть файл. Когда я загружаю файл от почтальона, он работает.
Мой код для загрузки файла:
onUploadFile = (event, authUser) => {
const {files} = this.state;
let reader = new FileReader();
reader.readAsDataURL(files[0]);
reader.onload = async (e) => {
const url = "https://us-central1-xxxxxx-4853a.cloudfunctions.net/uploadFileFirebase";
const fileNameResult = await fetch(e.target.result).then(res => res.blob());
const data = new FormData();
data.append(files[0].name, fileNameResult);
return axios.post(url, data, {
headers: {
"Content-Type": "multipart/form-data"
}
})
.then(response => console.log('result', response));
};
event.preventDefault();
};
В node js Я написал:
exports.uploadFileFirebase = functions.https.onRequest((req, res) => {
cors(req, res, () => {
if (req.method !== "POST") {
return res.status(500).json({
message: "Not allowed"
});
}
const busboy = new Busboy({headers: req.headers});
console.log(busboy);
let uploadData = null;
let fileName = null;
busboy.on("file", (fieldname, file, filename, encoding, mimetype) => {
console.log('in file');
try {
console.log('filename ==>');
console.log(filename);
fileName = filename;
const filepath = path.join(os.tmpdir(), filename);
uploadData = {file: filepath, type: mimetype};
file.pipe(fs.createWriteStream(filepath));
} catch (e) {
console.log(e);
}
});
busboy.on("finish", () => {
const bucket = gcs.bucket("xxxxxxx-4853a.appspot.com"); //TODO make map with company reference
bucket.upload(uploadData.file, {
uploadType: "media",
metadata: {
metadata: {
contentType: uploadData.type
}
}
})
.then(() => {
return res.status(200).json({
message: 'file uploaded'
});
})
.catch(err => {
return res.status(500).json({
error: err.toString()
});
});
});
busboy.end(req.rawBody);
});
});
файл сохраняется в хранилище под именем «blob». И имеет следующие данные:
[! [Введите здесь описание изображения] [1]] [1]
Я также продолжаю извлечение данных из файла, данные извлекаются правильно. Как правильно сохранить файл с правильным именем файла и в формате pdf, чтобы я мог открыть файл, например, в firebase.
Есть какие-нибудь мысли?
Решение для открытия файла в firebase добавляет uuid в метаданные.
metadata: {
metadata: {
contentType: uploadData.type,
firebaseStorageDownloadTokens: '1f040c40-6000-48c6-8320-4fa41d9b1730 '
}
}