Accessing Resources
The File Picker development has been discontinued in favour of the Web Embed Mode.
If using File picker as a web component, it is returning selected resources via events called select
and update
. To access them, you need to set an event listener where you’ll be able to get them as part of the response of the callback function.
<file-picker id="file-picker" variation="resource"></file-picker>
<script>
const item = document.getElementById('file-picker')
let resources = []
item.addEventListener('select', event => {
resources = event.detail[0]
})
</script>
Below is an example code demonstrating how to upload files to the selected location using the File picker, leveraging the tus-js-client library.
<file-picker id="file-picker" variation="resource"></file-picker>
<script>
const filePicker = document.querySelector('#file-picker')
const baseURL = 'https://<your-owncloud-server-domain>/remote.php/dav'
// A mocked file to upload
const file = new File(['Hello world!'], 'my-upload-file.md', { type: 'text/markdown' })
// This will be assigned a value once the token inside the File picker is set
let accessToken = ''
filePicker.addEventListener('select', (event) => {
// Select the resource from the event payloads
const resource = event.detail[0][0]
// Create a new tus upload
const upload = new tus.Upload(file, {
endpoint: baseURL + resource.webDavPath,
retryDelays: [0, 3000, 5000, 10000, 20000],
metadata: {
filename: file.name,
filetype: file.type,
},
headers: {
Authorization: accessToken
},
onError: function (error) {
console.log('Failed because: ' + error)
},
onProgress: function (bytesUploaded, bytesTotal) {
const percentage = ((bytesUploaded / bytesTotal) * 100).toFixed(2)
console.log(bytesUploaded, bytesTotal, percentage + '%')
},
onSuccess: function () {
console.log('File %s successfully uploaded into %s', upload.file.name, upload.url)
},
})
// Start the upload
upload.start()
})
// Setup a listener that will get the access token necessary to upload the file
filePicker.addEventListener('token', (event) => {
accessToken = 'Bearer ' + event.detail[0]
})
</script>