Skip to content

Instantly share code, notes, and snippets.

@lwakefield
Created May 26, 2016 13:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lwakefield/23b5ec7e28bb18a2ec1a638d4c2f07b7 to your computer and use it in GitHub Desktop.
Save lwakefield/23b5ec7e28bb18a2ec1a638d4c2f07b7 to your computer and use it in GitHub Desktop.
<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>
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();
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment