diff --git a/client/pages/upload/index.vue b/client/pages/upload/index.vue
index 547f5b05a..229b00f75 100644
--- a/client/pages/upload/index.vue
+++ b/client/pages/upload/index.vue
@@ -78,7 +78,11 @@
-
+
+
{{ $strings.ButtonUpload }}
{{ $strings.ButtonReset }}
@@ -105,6 +109,7 @@ export default {
selectedFolderId: null,
processing: false,
uploadFinished: false,
+ uploadChunked: false,
fetchMetadata: {
enabled: false,
provider: null
@@ -319,6 +324,39 @@ export default {
return false
})
},
+ async uploadItemChunked(item) {
+ // upload files
+ const form = new FormData()
+ form.set('title', item.title)
+ form.set('library', this.selectedLibraryId)
+ form.set('folder', this.selectedFolderId)
+ if (!this.selectedLibraryIsPodcast) {
+ form.set('author', item.author || '')
+ form.set('series', item.series || '')
+ }
+
+ for (let i = 0; i < item.files.length; i++) {
+ const file = item.files[i]
+
+ form.set('file', file)
+
+ const success = await this.$axios
+ .$post(`/api/upload`, form)
+ .then(() => true)
+ .catch((error) => {
+ console.error('Failed', error)
+ var errorMessage = error.response && error.response.data ? error.response.data : 'Oops, something went wrong...'
+ this.$toast.error(errorMessage)
+ return false
+ })
+
+ if (!success) {
+ return false
+ }
+ }
+
+ return true
+ },
validateItems() {
var itemData = []
for (var item of this.items) {
@@ -379,7 +417,9 @@ export default {
let itemsFailed = 0
for (const item of itemsToUpload) {
this.updateItemCardStatus(item.index, 'uploading')
- const result = await this.uploadItem(item)
+ const result = this.uploadChunked
+ ? await this.uploadItemChunked(item)
+ : await this.uploadItem(item)
if (result) itemsUploaded++
else itemsFailed++
this.updateItemCardStatus(item.index, result ? 'success' : 'failed')
diff --git a/client/strings/en-us.json b/client/strings/en-us.json
index 8fe9d8c7e..7d0298c9b 100644
--- a/client/strings/en-us.json
+++ b/client/strings/en-us.json
@@ -89,6 +89,7 @@
"ButtonSubmit": "Submit",
"ButtonTest": "Test",
"ButtonUpload": "Upload",
+ "LabelUploadChunked": "Upload Chunked",
"ButtonUploadBackup": "Upload Backup",
"ButtonUploadCover": "Upload Cover",
"ButtonUploadOPMLFile": "Upload OPML File",
@@ -779,4 +780,4 @@
"ToastSocketFailedToConnect": "Socket failed to connect",
"ToastUserDeleteFailed": "Failed to delete user",
"ToastUserDeleteSuccess": "User deleted"
-}
\ No newline at end of file
+}