MCPcopy
hub / github.com/nervgh/angular-file-upload / _xhrTransport

Method _xhrTransport

src/services/FileUploader.js:466–533  ·  view source on GitHub ↗

* The XMLHttpRequest transport * @param {FileItem} item * @private

(item)

Source from the content-addressed store, hash-verified

464 * @private
465 */
466 _xhrTransport(item) {
467 var xhr = item._xhr = new XMLHttpRequest();
468 var sendable;
469
470 if (!item.disableMultipart) {
471 sendable = new FormData();
472 forEach(item.formData, (obj) => {
473 forEach(obj, (value, key) => {
474 sendable.append(key, value);
475 });
476 });
477
478 sendable.append(item.alias, item._file, item.file.name);
479 }
480 else {
481 sendable = item._file;
482 }
483
484 if(typeof(item._file.size) != 'number') {
485 throw new TypeError('The file specified is no longer valid');
486 }
487
488 xhr.upload.onprogress = (event) => {
489 var progress = Math.round(event.lengthComputable ? event.loaded * 100 / event.total : 0);
490 this._onProgressItem(item, progress);
491 };
492
493 xhr.onload = () => {
494 var headers = this._parseHeaders(xhr.getAllResponseHeaders());
495 var response = this._transformResponse(xhr.response, headers);
496 var gist = this._isSuccessCode(xhr.status) ? 'Success' : 'Error';
497 var method = '_on' + gist + 'Item';
498 this[method](item, response, xhr.status, headers);
499 this._onCompleteItem(item, response, xhr.status, headers);
500 };
501
502 xhr.onerror = () => {
503 var headers = this._parseHeaders(xhr.getAllResponseHeaders());
504 var response = this._transformResponse(xhr.response, headers);
505 this._onErrorItem(item, response, xhr.status, headers);
506 this._onCompleteItem(item, response, xhr.status, headers);
507 };
508
509 xhr.onabort = () => {
510 var headers = this._parseHeaders(xhr.getAllResponseHeaders());
511 var response = this._transformResponse(xhr.response, headers);
512 this._onCancelItem(item, response, xhr.status, headers);
513 this._onCompleteItem(item, response, xhr.status, headers);
514 };
515
516 xhr.ontimeout = (e) => {
517 var headers = this._parseHeaders(xhr.getAllResponseHeaders());
518 var response = "Request Timeout.";
519 this._onTimeoutItem(item);
520 this._onCompleteItem(item, response, 408, headers);
521 };
522
523 xhr.open(item.method, item.url, true);

Callers

nothing calls this directly

Calls 8

_onProgressItemMethod · 0.95
_parseHeadersMethod · 0.95
_transformResponseMethod · 0.95
_isSuccessCodeMethod · 0.95
_onCompleteItemMethod · 0.95
_onErrorItemMethod · 0.95
_onCancelItemMethod · 0.95
_onTimeoutItemMethod · 0.95

Tested by

no test coverage detected