Skip to content

Commit 22307d2

Browse files
tdonohuevalorkin
authored andcommitted
feat(multipart): Create disableMultipart option in FileUploader (#224)
* Create disableMultipart option in FileUploader * Add basic docs
1 parent e068511 commit 22307d2

3 files changed

Lines changed: 17 additions & 7 deletions

File tree

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,11 @@ Follow me [![twitter](https://img.shields.io/twitter/follow/valorkin.svg?style=s
3737

3838
- `uploader` - (`FileUploader`) - uploader object. See using in [demo](https://github.com/valor-software/ng2-file-upload/blob/master/demo/components/file-upload/simple-demo.ts)
3939

40-
Parameters that supported by this object:
40+
Parameters supported by this object:
4141

4242
1. `url` - URL of File Uploader's route
4343
2. `authToken` - Auth token that will be applied as 'Authorization' header during file send.
44+
3. `disableMultipart` - If 'true', disable using a multipart form for file upload and instead stream the file. Some APIs (e.g. Amazon S3) may expect the file to be streamed rather than sent via a form. Defaults to false.
4445

4546
### Events
4647

components/file-upload/file-uploader.class.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ export interface FileUploaderOptions {
2828
queueLimit?:number;
2929
removeAfterUpload?:boolean;
3030
url?:string;
31+
disableMultipart?:boolean;
3132
}
3233

3334
export class FileUploader {
@@ -43,7 +44,8 @@ export class FileUploader {
4344
autoUpload: false,
4445
isHTML5: true,
4546
filters: [],
46-
removeAfterUpload: false
47+
removeAfterUpload: false,
48+
disableMultipart: false
4749
};
4850

4951
private _failFilterIndex:number;
@@ -282,7 +284,7 @@ export class FileUploader {
282284

283285
protected _xhrTransport(item:FileItem):any {
284286
let xhr = item._xhr = new XMLHttpRequest();
285-
let form = new FormData();
287+
let sendable:any;
286288
this._onBeforeUploadItem(item);
287289
// todo
288290
/*item.formData.map(obj => {
@@ -293,9 +295,15 @@ export class FileUploader {
293295
if (typeof item._file.size !== 'number') {
294296
throw new TypeError('The file specified is no longer valid');
295297
}
296-
this._onBuildItemForm(item, form);
298+
if(!this.options.disableMultipart) {
299+
sendable = new FormData();
300+
this._onBuildItemForm(item, sendable);
301+
302+
sendable.append(item.alias, item._file, item.file.name);
303+
} else {
304+
sendable = item._file;
305+
}
297306

298-
form.append(item.alias, item._file, item.file.name);
299307
xhr.upload.onprogress = (event:any) => {
300308
let progress = Math.round(event.lengthComputable ? event.loaded * 100 / event.total : 0);
301309
this._onProgressItem(item, progress);
@@ -334,7 +342,7 @@ export class FileUploader {
334342
if (this.authToken) {
335343
xhr.setRequestHeader('Authorization', this.authToken);
336344
}
337-
xhr.send(form);
345+
xhr.send(sendable);
338346
this._render();
339347
}
340348

components/file-upload/readme.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ import {FileSelectDirective, FileDropDirective, FileUploader} from 'ng2-file-upl
2020

2121
- `uploader` - (`FileUploader`) - uploader object. See using in [demo](https://github.com/valor-software/ng2-file-upload/blob/master/demo/components/file-upload/simple-demo.ts)
2222

23-
Parameters that supported by this object:
23+
Parameters supported by this object:
2424

2525
1. `url` - URL of File Uploader's route
2626
2. `authToken` - auth token that will be applied as 'Authorization' header during file send.
27+
3. `disableMultipart` - If 'true', disable using a multipart form for file upload and instead stream the file. Some APIs (e.g. Amazon S3) may expect the file to be streamed rather than sent via a form. Defaults to false.
2728

2829
## FileDrop API
2930

0 commit comments

Comments
 (0)