Upload multiple files to Cloudflare R2, using Honojs on node.js
technology
5 months ago
Upload multiple files to Cloudflare R2, using Honojs on node.js
To upload multiple files from a browser to Cloudflare R2 using Honojs on Node.js, you’ll need to set up an endpoint to handle multipart/form-data
requests and then interact with the Cloudflare R2 API to store the files.
Here’s a basic JavaScript program that demonstrates how to do this:
const { Hono } = require('hono'); const { formidable } = require('formidable-serverless'); // Initialize Hono app const app = new Hono(); // Endpoint to handle file uploads app.post('/upload', async (c) => { // Parse the multipart form data const form = new formidable.IncomingForm(); const files = await new Promise((resolve, reject) => { form.parse(c.req, (err, fields, files) => { if (err) reject(err); resolve(files); }); }); // Assuming you have set up Cloudflare R2 client // Replace 'r2Bucket' with your actual R2 bucket instance for (const file of Object.values(files)) { // Create a stream to read the file const stream = fs.createReadStream(file.filepath); // Upload the file to Cloudflare R2 await r2Bucket.put(file.originalFilename, stream, { httpMetadata: { contentType: file.mimetype, }, }); } // Respond with a success message return c.text('Files uploaded successfully!'); }); // Start the server app.listen({ port: 3000 }, () => { console.log('Server running on port 3000'); });
This code uses the formidable-serverless
package to parse the uploaded files and the hypothetical r2Bucket
object to interact with Cloudflare R2. You’ll need to replace 'r2Bucket'
with your actual Cloudflare R2 bucket instance and handle authentication as required by Cloudflare.
Please note that this is a simplified example and doesn’t include error handling or security features like authentication, which you should implement in a production environment. Also, ensure you have the necessary packages installed and configured in your Node.js project.
Remember to consult the Hono documentation and Cloudflare R2 documentation for more detailed information and to adapt the code to fit your specific use case.
Revised:
const { Hono } = require('hono'); const { multipart } = require('multipart-parser'); // Initialize Hono app const app = new Hono(); // Endpoint to handle file uploads app.post('/uploadfile', async (c) => { let prefix = "uploadtest"; const rawBody = Buffer.from(await c.req.arrayBuffer()); // Parse the 'content-type' header to get the boundary for multipart parsing const boundary = c.req.headers.get("content-type").split(";")[1].split("=")[1]; const parts = multipart.parse(rawBody, boundary); // Process each part of the multipart form data for (const part of parts) { if (part.name === "prefix") { // Decode the prefix if provided prefix = new TextDecoder().decode(part.data); console.log("prefix:", prefix); } } for (const part of parts) { if (part.filename) { // Decode the filename to handle UTF-8 characters const fileName = decodeURIComponent(escape(part.filename)); console.log("filename:", fileName); // Create an object with the file data to be uploaded const dataObj = { "Body": part.data, "Bucket": 'mybucket', // Replace with your actual bucket name "Key": `${prefix}/${fileName}` }; // Upload the file to Cloudflare R2 await s3putobject(dataObj); } } // Respond with a success message return c.text('Uploaded successfully!'); }); // Start the server app.fire();
In this code:
- We’re using the
multipart-parser
library to parse the multipart form data. - The
prefix
variable is used to create a directory structure in the R2 bucket. - The
s3putobject
function is assumed to be a custom function that handles the interaction with Cloudflare R2’s API to upload the file.
Please ensure that you replace 'mybucket'
with your actual Cloudflare R2 bucket name and implement the s3putobject
function according to Cloudflare R2’s API specifications.
If you have any further questions or need additional assistance, feel free to ask. Happy coding! 😊
You may also like:
Psum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate.
Technology is nothing. What's important is that you have a faith in people, that they're basically good and smart, and if you give them tools, they'll do wonderful things with them
You Can Buy For Less Than A College Degree
Dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut Aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum bore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea com
Leave a comment