feat: add initial plugin for a post file upload via s5 sdk
This commit is contained in:
parent
dca77ba71a
commit
988780b25f
|
@ -0,0 +1,62 @@
|
||||||
|
import Uppy, {BasePlugin, DefaultPluginOptions} from '@uppy/core';
|
||||||
|
import {PROTOCOL_S5, Sdk} from "@lumeweb/portal-sdk";
|
||||||
|
import {S5Client} from "@lumeweb/s5-js";
|
||||||
|
import {AxiosProgressEvent} from "axios";
|
||||||
|
|
||||||
|
|
||||||
|
interface UppyFileUploadOptions extends DefaultPluginOptions {
|
||||||
|
sdk: Sdk;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class UppyFileUpload extends BasePlugin {
|
||||||
|
private _sdk: Sdk;
|
||||||
|
|
||||||
|
constructor(uppy: Uppy, opts?: UppyFileUploadOptions) {
|
||||||
|
super(uppy, opts);
|
||||||
|
this.id = opts?.id || 'file-upload';
|
||||||
|
this._sdk = opts?.sdk as Sdk;
|
||||||
|
}
|
||||||
|
|
||||||
|
install() {
|
||||||
|
this.uppy.addUploader(this.handleUpload);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async handleUpload(fileIDs: string[]) {
|
||||||
|
for (const fileID of fileIDs) {
|
||||||
|
const file = this.uppy.getFile(fileID);
|
||||||
|
if (!file) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @ts-ignore
|
||||||
|
if (file.uploader !== 'file') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uploadLimit = await this._sdk.account().uploadLimit();
|
||||||
|
|
||||||
|
let data = file.data;
|
||||||
|
|
||||||
|
if (file.data instanceof Blob) {
|
||||||
|
data = new File([data], file.name, {type: file.type});
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
await this._sdk.protocols().get<S5Client>(PROTOCOL_S5).getSdk().uploadFile(data as File, {
|
||||||
|
largeFileSize: uploadLimit,
|
||||||
|
onUploadProgress: (progressEvent: AxiosProgressEvent) => {
|
||||||
|
this.uppy.emit('upload-progress', this.uppy.getFile(file.id), {
|
||||||
|
uploader: this,
|
||||||
|
bytesUploaded: progressEvent.loaded,
|
||||||
|
bytesTotal: progressEvent.total,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.uppy.emit('upload-success', file, {uploadURL: null});
|
||||||
|
} catch (err) {
|
||||||
|
this.uppy.emit('upload-error', file, err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue