Skip to content

Instantly share code, notes, and snippets.

@lwakefield
Created May 26, 2016 13:05
Show Gist options
  • Save lwakefield/23b5ec7e28bb18a2ec1a638d4c2f07b7 to your computer and use it in GitHub Desktop.
Save lwakefield/23b5ec7e28bb18a2ec1a638d4c2f07b7 to your computer and use it in GitHub Desktop.

Revisions

  1. lwakefield created this gist May 26, 2016.
    21 changes: 21 additions & 0 deletions client.html
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    <input type="file">

    <script>
    var el = document.querySelector('input[type="file"]');
    el.addEventListener('change', function(event) {
    let files = e.target.files;
    for (let i = 0; i < files.length; i++) {
    let file = files[i];
    var xhr = new XMLHttpRequest();
    // set the url to wherever you meteor app is running
    xhr.open('PUT', 'http://localhost:3000/file', true);
    xhr.onload = (event) => {
    console.log('done uploading!');
    };
    xhr.upload.onprogress = (event) => {
    let percent = 100 * (event.loaded / event.total);
    console.log(percent+'% uploaded');
    };
    xhr.send(file);
    });
    </script>
    33 changes: 33 additions & 0 deletions server.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,33 @@
    import { Meteor } from 'meteor/meteor';

    WebApp.connectHandlers.use('/file', (req, res) => {
    res.setHeader("Access-Control-Allow-Methods", "PUT");
    res.setHeader("Access-Control-Allow-Origin", "*");
    res.setHeader("Access-Control-Allow-Headers", "Content-Type");

    if (req.method === 'OPTIONS') {
    res.writeHead(200);
    res.end();
    return;
    } else if (req.method === 'PUT') {
    if (!req.headers['content-type'].startsWith('image')) {
    res.writeHead(400);
    res.end();
    }

    let getFile = Meteor.wrapAsync(done => {
    let chunks = [];
    req.on('readable', () => {
    chunks.push(req.read());
    });
    req.on('end', () => {
    done(undefined, Buffer.concat(chunks));
    });
    });

    let buffer = getFile();

    res.writeHead(200);
    res.end();
    }
    });