I am getting connect Request failed with status code 400
from b2.uploadFIle()
Here’s what I tried to do:
Step 1: Download backblaze-b2 node.js library and multer(to get image file in req.body)
Step 2: Set up how I’m going to call my route in POSTMAN. I have attached an IronMan.png in my request.
Step 3: Set up my code:
import B2 from "backblaze-b2"; export const uploadCreationImage = async ( ) => { try { const b2 = new B2({ applicationKeyId: process.env.backblazeb2ApplicationKeyId, applicationKey: process.env.backblazeb2ApplicationKey, }); await b2.authorize(); // must authorize first (authorization lasts 24 hrs) console.log("I am here"); let response = await b2.getBucket({ bucketName: "bucketName", }); var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, "./uploads"); }, filename: function (req, file, cb) { cb(null, file.originalname); }, }); const multerUploader = multer({}); upload(req, res, (err: any) => { if (err instanceof multer.MulterError) { return res.sendStatus(INTERNAL_SERVER_ERROR_STATUS); // A Multer error occurred when uploading. } else if (err) { // An unknown error occurred when uploading. return res.sendStatus(INTERNAL_SERVER_ERROR_STATUS); } // console.log("joe", req.file.buffer); // console.log("biden", req.file); b2.getUploadUrl({ bucketId: "58dd09e54842aafc7dcd0917", // ...common arguments (optional) }).then((response) => { console.log("getUploadUrl", response.data.uploadUrl , response.data.authorizationToken); b2.uploadFile({ uploadUrl: response.data.uploadUrl, uploadAuthToken: response.data.authorizationToken, fileName: "fileName", data: req.file.buffer, // this is expecting a Buffer, not an encoded string onUploadProgress: null, //onUploadProgress: (event) => {} || null // progress monitoring // ...common arguments (optional) }).then((response) => { console.log('uploadFIle', response); return res.send({ path: req.file.originalname }); } // Everything went fine and save document in DB here. }); });
I used multer to get the image file from the form request and then pass it to b2.uploadFile’s data property as a buffer.
Any help would be appreciated!
Advertisement
Answer
Fixed! all I had to do was to get rid of the optional parameters in b2.uploadFile()
upload(req, res, (err: any) => { if (err instanceof multer.MulterError) { return res.sendStatus(INTERNAL_SERVER_ERROR_STATUS); // A Multer error occurred when uploading. } else if (err) { // An unknown error occurred when uploading. return res.sendStatus(INTERNAL_SERVER_ERROR_STATUS); } b2.getUploadUrl({ bucketId: process.env.backblazeb2BucketId, // ...common arguments (optional) }).then((response) => { console.log( "getUploadUrl", response.data.uploadUrl, response.data.authorizationToken ); b2.uploadFile({ uploadUrl: response.data.uploadUrl, uploadAuthToken: response.data.authorizationToken, fileName: "fileName", // contentLength: 0, // optional data length, will default to data.byteLength or data.length if not provided //mime: "", // optional mime type, will default to 'b2/x-auto' if not provided data: req.file.buffer, // this is expecting a Buffer, not an encoded string //hash: "sha1-hash", // optional data hash, will use sha1(data) if not provided // info: { // // optional info headers, prepended with X-Bz-Info- when sent, throws error if more than 10 keys set // // valid characters should be a-z, A-Z and '-', all other characters will cause an error to be thrown // key1: "value", // key2: "value", // }, onUploadProgress: (event) => {}, //onUploadProgress: (event) => {} || null // progress monitoring // ...common arguments (optional) }).then((response) => { console.log("uploadFIle", response); return res.send({ path: req.file.originalname, }); }); // Everything went fine and save document in DB here. }); });