ngx-uploadx
Version:
Angular Resumable Upload Module
41 lines • 5.79 kB
JavaScript
import { Uploader } from './uploader';
import { b64, resolveUrl } from './utils';
/**
* Implements tus resumable upload protocol
* {@link https://github.com/tus/tus-resumable-upload-protocol/blob/master/protocol.md Github}
*/
export class Tus extends Uploader {
headers = { 'Tus-Resumable': '1.0.0' };
async getFileUrl() {
const encodedMetaData = b64.serialize(this.metadata);
const headers = {
'Upload-Length': this.size,
'Upload-Metadata': encodedMetaData
};
await this.request({ method: 'POST', url: this.endpoint, headers });
this.offset = this.getOffsetFromResponse() || (this.responseStatus === 201 ? 0 : undefined);
const location = this.getValueFromResponse('location');
if (!location) {
throw new Error('Invalid or missing Location header');
}
return resolveUrl(location, this.endpoint);
}
async sendFileContent() {
const { body, start, end } = this.getChunk();
const headers = {
'Content-Type': 'application/offset+octet-stream',
'Upload-Offset': start
};
await this.request({ method: 'PATCH', body, headers });
return this.getOffsetFromResponse() || end;
}
async getOffset() {
await this.request({ method: 'HEAD' });
return this.getOffsetFromResponse();
}
getOffsetFromResponse() {
const offset = this.getValueFromResponse('Upload-Offset');
return offset ? parseInt(offset, 10) : undefined;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3VwbG9hZHgvbGliL3R1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTFDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxHQUFJLFNBQVEsUUFBUTtJQUMvQixPQUFPLEdBQUcsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFFdkMsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxNQUFNLE9BQU8sR0FBRztZQUNkLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSTtZQUMxQixpQkFBaUIsRUFBRSxlQUFlO1NBQ25DLENBQUM7UUFDRixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlO1FBQ25CLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QyxNQUFNLE9BQU8sR0FBRztZQUNkLGNBQWMsRUFBRSxpQ0FBaUM7WUFDakQsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQztRQUNGLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDN0MsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTO1FBQ2IsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRVMscUJBQXFCO1FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVwbG9hZGVyIH0gZnJvbSAnLi91cGxvYWRlcic7XG5pbXBvcnQgeyBiNjQsIHJlc29sdmVVcmwgfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBJbXBsZW1lbnRzIHR1cyByZXN1bWFibGUgdXBsb2FkIHByb3RvY29sXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3R1cy90dXMtcmVzdW1hYmxlLXVwbG9hZC1wcm90b2NvbC9ibG9iL21hc3Rlci9wcm90b2NvbC5tZCAgR2l0aHVifVxuICovXG5leHBvcnQgY2xhc3MgVHVzIGV4dGVuZHMgVXBsb2FkZXIge1xuICBoZWFkZXJzID0geyAnVHVzLVJlc3VtYWJsZSc6ICcxLjAuMCcgfTtcblxuICBhc3luYyBnZXRGaWxlVXJsKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZW5jb2RlZE1ldGFEYXRhID0gYjY0LnNlcmlhbGl6ZSh0aGlzLm1ldGFkYXRhKTtcbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgJ1VwbG9hZC1MZW5ndGgnOiB0aGlzLnNpemUsXG4gICAgICAnVXBsb2FkLU1ldGFkYXRhJzogZW5jb2RlZE1ldGFEYXRhXG4gICAgfTtcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3QoeyBtZXRob2Q6ICdQT1NUJywgdXJsOiB0aGlzLmVuZHBvaW50LCBoZWFkZXJzIH0pO1xuICAgIHRoaXMub2Zmc2V0ID0gdGhpcy5nZXRPZmZzZXRGcm9tUmVzcG9uc2UoKSB8fCAodGhpcy5yZXNwb25zZVN0YXR1cyA9PT0gMjAxID8gMCA6IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmdldFZhbHVlRnJvbVJlc3BvbnNlKCdsb2NhdGlvbicpO1xuICAgIGlmICghbG9jYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvciBtaXNzaW5nIExvY2F0aW9uIGhlYWRlcicpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZVVybChsb2NhdGlvbiwgdGhpcy5lbmRwb2ludCk7XG4gIH1cblxuICBhc3luYyBzZW5kRmlsZUNvbnRlbnQoKTogUHJvbWlzZTxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB7IGJvZHksIHN0YXJ0LCBlbmQgfSA9IHRoaXMuZ2V0Q2h1bmsoKTtcbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9vZmZzZXQrb2N0ZXQtc3RyZWFtJyxcbiAgICAgICdVcGxvYWQtT2Zmc2V0Jzogc3RhcnRcbiAgICB9O1xuICAgIGF3YWl0IHRoaXMucmVxdWVzdCh7IG1ldGhvZDogJ1BBVENIJywgYm9keSwgaGVhZGVycyB9KTtcbiAgICByZXR1cm4gdGhpcy5nZXRPZmZzZXRGcm9tUmVzcG9uc2UoKSB8fCBlbmQ7XG4gIH1cblxuICBhc3luYyBnZXRPZmZzZXQoKTogUHJvbWlzZTxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3QoeyBtZXRob2Q6ICdIRUFEJyB9KTtcbiAgICByZXR1cm4gdGhpcy5nZXRPZmZzZXRGcm9tUmVzcG9uc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRPZmZzZXRGcm9tUmVzcG9uc2UoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmdldFZhbHVlRnJvbVJlc3BvbnNlKCdVcGxvYWQtT2Zmc2V0Jyk7XG4gICAgcmV0dXJuIG9mZnNldCA/IHBhcnNlSW50KG9mZnNldCwgMTApIDogdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=