Recv/public/src/route/Upload.vue

141 lines
2.9 KiB
Vue

<template>
<div id="upload">
<div class="message" v-if="message !== null">
<div class="from" v-if="message.name !== null">{{ $t('messageFrom') + message.name }}</div>
<div v-html="message.message"></div>
</div>
<div class="uploadTarget"></div>
<div class="navigation">
<router-link to="/" class="pure-button">Terug</router-link>
</div>
</div>
</template>
<script>
import _ from 'lodash';
import shared from '../shared';
import Uppy from 'uppy/lib/core';
import Dashboard from 'uppy/lib/plugins/Dashboard';
import Tus from 'uppy/lib/plugins/Tus';
import axios from 'axios';
export default {
props: [
'codeParam',
'i18n'
],
data () {
return {
uploadToken: shared.uploadToken,
message: null
}
},
created()
{
var self = this;
if (!self.uploadToken)
{
if (self.codeParam)
self.$router.push('/c/' + self.codeParam);
else
self.$router.push('/c/');
return;
}
axios.get('/message/' + encodeURIComponent(self.codeParam))
.then((response) =>
{
self.message = response.status !== 204 ? response.data : null;
});
},
mounted()
{
var self = this;
self.uppy = Uppy({
id: 'userUpload',
autoProceed: false,
debug: true
})
.use(Dashboard, {
inline: true,
target: '.uploadTarget',
replaceTargetContent: true,
locale: {
strings: {
done: self.$i18n.t('uppyDashboard.done'),
dropPaste: self.$i18n.t('uppyDashboard.dropPaste'),
browse: self.$i18n.t('uppyDashboard.browse')
}
}
})
.use(Tus, {
endpoint: '/upload/',
headers: {
Authorization: 'Bearer ' + self.uploadToken
}
})
.run();
self.uppy.on('complete', (result) =>
{
axios.post('/complete', {
files: _.map(result.successful, (file) =>
{
return {
id: file.tus.uploadUrl.substr(file.tus.uploadUrl.lastIndexOf('/') + 1),
name: file.name
};
})
},
{
headers: {
Authorization: 'Bearer ' + self.uploadToken
}
})
.then((response) =>
{
// TODO anything?
})
.catch((error) =>
{
// TODO can we convince Uppy that the files actually failed?
shared.$emit('showNotification', error.message);
});
});
self.uppy.on('upload-success', (file, resp, uploadURL) => {
// Clear the uploadURL so the dashboard will not display it as a link.
// The file can't be viewed by the user anyways since JWT headers are required.
self.uppy.setFileState(file.id, {
uploadURL: false
})
});
}
}
</script>
<style lang="scss">
.message
{
.from
{
color: #808080;
font-style: italic;
}
}
.navigation
{
margin-top: 1rem;
text-align: center;
}
</style>