Skip to main content

Upload CSV to S3

JavaScript with AWS API Gateway#

  • this page hslventures.com/uploadfile allows users to upload their csv file to our s3 bucket. The data then will be stored into one of our databases for process and analysis.
<!DOCTYPE html><html>    <head>        <meta name="viewport" content="width=device-width, initial-scale=1">        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.2/css/bulma.min.css">        <title>upload your file</title>        <script src="https://sdk.amazonaws.com/js/aws-sdk-2.1.12.min.js"></script>    </head> <!-- <h2>Upload your CSV file</h2> -->    <body>
        <ul>        <p> &#128515; please enter your email address:</p>        <input type="text" name="key" value="myemail@email.com" id="email" required="true"/>        </ul>        <input type="file" id="file-chooser" accept="csv" required="true"/>        <button id="upload-button">upload</button>        <button onClick="url()">submit</button>        <div id="results"></div>
        <!-- main s3 function starts here -->        <script type="text/javascript">        AWS.config.region = 'us-east-1'; // 1. Enter your region
        AWS.config.credentials = new AWS.CognitoIdentityCredentials({            '' // 2. Enter your identity pool        });
        AWS.config.credentials.get(function(err) {            if (err) alert(err);            console.log(AWS.config.credentials);        });
        var bucketName = ''; // Enter your bucket name        var bucket = new AWS.S3({            params: {                Bucket: bucketName            }        });
        var fileChooser = document.getElementById('file-chooser');        var button = document.getElementById('upload-button');        var input = document.getElementById('email');        var url = document.getElementById('url')        var results = document.getElementById('results');        button.addEventListener('click', function() {
            var file = fileChooser.files[0];            var email = input


            if (file, email) {
                results.innerHTML = '';                var objKey = 'uploads/' + email.value + '-' + file.name;                var params = {                    Key: objKey,                    ContentType: file.type,                    Body: file,                    ACL: 'public-read'                };
                bucket.putObject(params, function(err, data) {                    if (err) {                        results.innerHTML = 'ERROR: ' + err;                    } else {                        listObjs();                    }                });            } else {                results.innerHTML = 'Nothing to upload.';            }        }, false);        function listObjs() {            var prefix = 'uploading';            bucket.listObjects({                Prefix: prefix            }, function(err, data) {                if (err) {                    results.innerHTML = 'ERROR: ' + err;                } else {                    var objKeys = "";                    data.Contents.forEach(function(obj) {                        objKeys += obj.Key + "<br>";                    });                    results.innerHTML = objKeys;                    results.innerHTML = ('push submit button')                    console.log('uploading file')                }            });        }        </script>
        <!-- function takes you to thank you page -->        <script>            function url(){                location.href = 'https://www.hslventures.com/we-will-get-back-to-you';            }        </script>

    </body>
</html>

AWS Lambda Function#

this function notifies me when a new file has been uploaded

var aws = require("aws-sdk");var nodemailer = require("nodemailer");
var ses = new aws.SES();var s3 = new aws.S3();
exports.handler = function (event, context, callback) {
    var mailOptions = {        from: "",        subject: "someone submitted a new file in hslventures!",        html: `<p>You got a contact message from: <b>${event.emailAddress}</b></p>`,        to: "",        // bcc: Any BCC address you want here in an array,    };
    // create Nodemailer SES transporter    var transporter = nodemailer.createTransport({        SES: ses    });
    // send email    transporter.sendMail(mailOptions, function (err, info) {        if (err) {            console.log("Error sending email");            callback(err);        } else {            console.log("Email sent successfully");            callback();        }    });};