Skip to content

Instantly share code, notes, and snippets.

@shrunyan
Last active August 7, 2016 22:42
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shrunyan/3b219d8dfa27aec3328d762ddf3addd7 to your computer and use it in GitHub Desktop.
Save shrunyan/3b219d8dfa27aec3328d762ddf3addd7 to your computer and use it in GitHub Desktop.
Example xhr request to post file from form to dropbox
<form action="/" method="post" name="newsletter">
<input type="text" name="first_name" value="stuart" />
<input type="file" id="resume" />
<input type="hidden" id="dropbox" />
<input type="hidden" name="zlf" value="1" />
<button type="submit">Submit</button>
</form>
<script>
document.forms.newsletter.addEventListener('submit', function cb(evt) {
evt.preventDefault()
// API key from here: https://dropbox.github.io/dropbox-api-v2-explorer/#files_upload
// need to consider how this gets secured
var TOKEN = ''
var dir = 'api-test/'
var file = document.getElementById('resume').files[0]
var promise = new Promise(function (resolve, reject) {
// Dropbox requires application/octet-stream
var xhr = new XMLHttpRequest();
xhr.onload = function() {
if (xhr.status === 200) {
resolve(JSON.parse(xhr.response));
}
else {
reject(xhr.response || 'Unable to upload file');
}
};
xhr.open('POST', 'https://content.dropboxapi.com/2/files/upload');
xhr.setRequestHeader('Authorization', 'Bearer ' + TOKEN);
xhr.setRequestHeader('Content-Type', 'application/octet-stream');
xhr.setRequestHeader('Dropbox-API-Arg', JSON.stringify({
path: '/' + dir + file.name,
mode: 'add',
autorename: true,
mute: false
}));
xhr.send(file);
})
promise
.then(function (result) {
// Save dropbox response to form
document.getElementById('dropbox').value = JSON.stringify(result)
// Submit form on successful upload
evt.target.submit()
})
.catch(function (err) {
console.error(err)
})
return false
})
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment