|
24 | 24 |
|
25 | 25 | <script>
|
26 | 26 | import { useQuasar } from "quasar";
|
27 |
| -import { ROOT_FOLDER, apiHandler, decode } from "src/appUtils"; |
| 27 | +import { ROOT_FOLDER, apiHandler, decode, sleep } from "src/appUtils"; |
28 | 28 | import { useMainStore } from "stores/main-store";
|
29 | 29 |
|
30 | 30 | export default {
|
@@ -168,69 +168,76 @@ export default {
|
168 | 168 |
|
169 | 169 | const chunkSize = 95 * 1024 * 1024;
|
170 | 170 | // Files bigger than 100MB require multipart upload
|
171 |
| - if (file.size > chunkSize) { |
172 |
| - const { uploadId } = ( |
173 |
| - await apiHandler.multipartCreate(file, key, this.selectedBucket) |
174 |
| - ).data; |
175 |
| -
|
176 |
| - let partNumber = 1; |
177 |
| - const parts = []; |
178 |
| - // console.log('total: ', file.size) |
179 |
| - // console.log('chunk: ', chunkSize) |
180 |
| -
|
181 |
| - for (let start = 0; start < file.size; start += chunkSize) { |
182 |
| - const end = Math.min(start + chunkSize, file.size); |
183 |
| - const chunk = file.slice(start, end); |
184 |
| - // console.log(`${start} -> ${end}`) |
185 |
| -
|
186 |
| - const { data } = await apiHandler.multipartUpload( |
187 |
| - uploadId, |
188 |
| - partNumber, |
| 171 | +
|
| 172 | + try { |
| 173 | + if (file.size > chunkSize) { |
| 174 | + const { uploadId } = ( |
| 175 | + await apiHandler.multipartCreate(file, key, this.selectedBucket) |
| 176 | + ).data; |
| 177 | +
|
| 178 | + let partNumber = 1; |
| 179 | + const parts = []; |
| 180 | + // console.log('total: ', file.size) |
| 181 | + // console.log('chunk: ', chunkSize) |
| 182 | +
|
| 183 | + for (let start = 0; start < file.size; start += chunkSize) { |
| 184 | + const end = Math.min(start + chunkSize, file.size); |
| 185 | + const chunk = file.slice(start, end); |
| 186 | + // console.log(`${start} -> ${end}`) |
| 187 | +
|
| 188 | + const { data } = await apiHandler.multipartUpload( |
| 189 | + uploadId, |
| 190 | + partNumber, |
| 191 | + this.selectedBucket, |
| 192 | + key, |
| 193 | + chunk, |
| 194 | + (progressEvent) => { |
| 195 | + //console.log((start + progressEvent.loaded) * 100 / file.size) |
| 196 | + notif({ |
| 197 | + caption: `${Number.parseInt(((uploadSize + start + progressEvent.loaded) * 100) / totalSize)}%`, |
| 198 | + }); |
| 199 | + // self.$store.dispatch('setUploadProgress', { |
| 200 | + // filename: file.name, |
| 201 | + // progress: (start + progressEvent.loaded) * 100 / file.size |
| 202 | + // }) // TODO |
| 203 | + }, |
| 204 | + ); |
| 205 | +
|
| 206 | + parts.push(data); |
| 207 | + partNumber += 1; |
| 208 | + } |
| 209 | +
|
| 210 | + await apiHandler.multipartComplete( |
| 211 | + file, |
| 212 | + key, |
189 | 213 | this.selectedBucket,
|
| 214 | + parts, |
| 215 | + uploadId, |
| 216 | + ); |
| 217 | + } else { |
| 218 | + await apiHandler.uploadObjects( |
| 219 | + file, |
190 | 220 | key,
|
191 |
| - chunk, |
| 221 | + this.selectedBucket, |
192 | 222 | (progressEvent) => {
|
193 |
| - //console.log((start + progressEvent.loaded) * 100 / file.size) |
| 223 | + //console.log(progressEvent.loaded * 100 / file.size) |
194 | 224 | notif({
|
195 |
| - caption: `${Number.parseInt(((uploadSize + start + progressEvent.loaded) * 100) / totalSize)}%`, |
| 225 | + caption: `${Number.parseInt(((uploadSize + progressEvent.loaded) * 100) / totalSize)}%`, |
196 | 226 | });
|
197 | 227 | // self.$store.dispatch('setUploadProgress', {
|
198 | 228 | // filename: file.name,
|
199 |
| - // progress: (start + progressEvent.loaded) * 100 / file.size |
| 229 | + // progress: progressEvent.loaded * 100 / file.size |
200 | 230 | // }) // TODO
|
201 | 231 | },
|
202 | 232 | );
|
203 |
| -
|
204 |
| - parts.push(data); |
205 |
| - partNumber += 1; |
206 | 233 | }
|
207 |
| -
|
208 |
| - await apiHandler.multipartComplete( |
209 |
| - file, |
210 |
| - key, |
211 |
| - this.selectedBucket, |
212 |
| - parts, |
213 |
| - uploadId, |
214 |
| - ); |
215 |
| - } else { |
216 |
| - await apiHandler.uploadObjects( |
217 |
| - file, |
218 |
| - key, |
219 |
| - this.selectedBucket, |
220 |
| - (progressEvent) => { |
221 |
| - //console.log(progressEvent.loaded * 100 / file.size) |
222 |
| - notif({ |
223 |
| - caption: `${Number.parseInt(((uploadSize + progressEvent.loaded) * 100) / totalSize)}%`, |
224 |
| - }); |
225 |
| - // self.$store.dispatch('setUploadProgress', { |
226 |
| - // filename: file.name, |
227 |
| - // progress: progressEvent.loaded * 100 / file.size |
228 |
| - // }) // TODO |
229 |
| - }, |
230 |
| - ); |
| 234 | + } catch (e) { |
| 235 | + console.error(`Unable to upload file ${file.name}: ${e.message}`); |
231 | 236 | }
|
232 | 237 |
|
233 | 238 | uploadSize += file.size;
|
| 239 | +
|
| 240 | + await sleep(200); |
234 | 241 | }
|
235 | 242 | }
|
236 | 243 |
|
|
0 commit comments