Last active
January 10, 2023 03:50
-
-
Save msukmanowsky/c8daf3720c2839d3c535afc69234ab9e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// middleware.js | |
exports.filesUpload = function(req, res, next) { | |
// See https://cloud.google.com/functions/docs/writing/http#multipart_data | |
const busboy = new Busboy({ | |
headers: req.headers, | |
limits: { | |
// Cloud functions impose this restriction anyway | |
fileSize: 10 * 1024 * 1024, | |
} | |
}); | |
const fields = {}; | |
const files = []; | |
const fileWrites = []; | |
// Note: os.tmpdir() points to an in-memory file system on GCF | |
// Thus, any files in it must fit in the instance's memory. | |
const tmpdir = os.tmpdir(); | |
busboy.on('field', (key, value) => { | |
// You could do additional deserialization logic here, values will just be | |
// strings | |
fields[key] = value; | |
}); | |
busboy.on('file', (fieldname, file, filename, encoding, mimetype) => { | |
const filepath = path.join(tmpdir, filename); | |
console.log(`Handling file upload field ${fieldname}: ${filename} (${filepath})`); | |
const writeStream = fs.createWriteStream(filepath); | |
file.pipe(writeStream); | |
fileWrites.push(new Promise((resolve, reject) => { | |
file.on('end', () => writeStream.end()); | |
writeStream.on('finish', () => { | |
fs.readFile(filepath, (err, buffer) => { | |
const size = Buffer.byteLength(buffer); | |
console.log(`${filename} is ${size} bytes`); | |
if (err) { | |
return reject(err); | |
} | |
files.push({ | |
fieldname, | |
originalname: filename, | |
encoding, | |
mimetype, | |
buffer, | |
size, | |
}); | |
try { | |
fs.unlinkSync(filepath); | |
} catch (error) { | |
return reject(error); | |
} | |
resolve(); | |
}); | |
}); | |
writeStream.on('error', reject); | |
})); | |
}); | |
busboy.on('finish', () => { | |
Promise.all(fileWrites) | |
.then(() => { | |
req.body = fields; | |
req.files = files; | |
next(); | |
}) | |
.catch(next); | |
}); | |
busboy.end(req.rawBody); | |
} |
i modified the code and here is working version for me:
`var busboy = new Busboy({ headers: req.headers });
const bucket = storage.bucket('buketdeneme');
let mimtype;
var saveTo;
busboy.on('file', function(name, file, filename, encoding, mimetype) {
console.log('File [' + name + ']: filename: ' + filename + ', encoding: ' + encoding + ', mimetype: ' + mimetype);
const imageExtension = filename.split('.')[filename.split('.').length - 1];
var fname=filename+'.'+imageExtension;
saveTo = path.join(os.tmpdir(), filename);
file.pipe(fs.createWriteStream(saveTo));
mimtype=mimetype;
});
busboy.on('finish', async function() {
await bucket.upload(saveTo, {
resumable: false,
gzip: true,
metadata:{
metadata:{
contentType:mimtype
}
}
})
.then( () => {
return res.json({message: "Image Uploaded Successfully"});
})
.catch(err => {
console.error(err);
return res.status(400).send(JSON.stringify(err, ["message", "arguments", "type", "name"]));
});
res.end();
});
req.pipe(busboy);`
thanks !!
Hi, can you show me solution for embed in code,
https://github.com/ThalKod/DropIt
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@jayjaydluffy do you can solve this?