ParseFileController.default.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  2. var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
  3. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  4. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  5. var _CoreManager = _interopRequireDefault(require("./CoreManager"));
  6. var _ParseFileEncode = require("./ParseFileEncode");
  7. var XHR = null;
  8. if (typeof XMLHttpRequest !== 'undefined') {
  9. XHR = XMLHttpRequest;
  10. }
  11. var DefaultController = {
  12. saveFile: function (name, source, options) {
  13. var base64Data, _base64Data$split, _base64Data$split2, first, second, data, newSource;
  14. return _regenerator.default.async(function (_context) {
  15. while (1) {
  16. switch (_context.prev = _context.next) {
  17. case 0:
  18. if (!(source.format !== 'file')) {
  19. _context.next = 2;
  20. break;
  21. }
  22. throw new Error('saveFile can only be used with File-type sources.');
  23. case 2:
  24. _context.next = 4;
  25. return _regenerator.default.awrap(new Promise(function (res, rej) {
  26. var reader = new FileReader();
  27. reader.onload = function () {
  28. return res(reader.result);
  29. };
  30. reader.onerror = function (error) {
  31. return rej(error);
  32. };
  33. reader.readAsDataURL(source.file);
  34. }));
  35. case 4:
  36. base64Data = _context.sent;
  37. _base64Data$split = base64Data.split(','), _base64Data$split2 = (0, _slicedToArray2.default)(_base64Data$split, 2), first = _base64Data$split2[0], second = _base64Data$split2[1];
  38. data = second ? second : first;
  39. newSource = {
  40. format: 'base64',
  41. base64: data,
  42. type: source.type || (source.file ? source.file.type : null)
  43. };
  44. _context.next = 10;
  45. return _regenerator.default.awrap(DefaultController.saveBase64(name, newSource, options));
  46. case 10:
  47. return _context.abrupt("return", _context.sent);
  48. case 11:
  49. case "end":
  50. return _context.stop();
  51. }
  52. }
  53. }, null, null, null, Promise);
  54. },
  55. saveBase64: function (name, source, options) {
  56. if (source.format !== 'base64') {
  57. throw new Error('saveBase64 can only be used with Base64-type sources.');
  58. }
  59. var data = {
  60. base64: source.base64,
  61. fileData: {
  62. ipfs: options.ipfs,
  63. metadata: (0, _extends2.default)({}, options.metadata),
  64. tags: (0, _extends2.default)({}, options.tags)
  65. }
  66. };
  67. delete options.metadata;
  68. delete options.tags;
  69. if (source.type) {
  70. data._ContentType = source.type;
  71. }
  72. return _CoreManager.default.getRESTController().request('POST', "files/" + name, data, options);
  73. },
  74. download: function (uri, options) {
  75. if (XHR) {
  76. return this.downloadAjax(uri, options);
  77. }
  78. return Promise.reject('Cannot make a request: No definition of XMLHttpRequest was found.');
  79. },
  80. downloadAjax: function (uri, options) {
  81. return new Promise(function (resolve, reject) {
  82. var xhr = new XHR();
  83. xhr.open('GET', uri, true);
  84. xhr.responseType = 'arraybuffer';
  85. xhr.onerror = function (e) {
  86. reject(e);
  87. };
  88. xhr.onreadystatechange = function () {
  89. if (xhr.readyState !== xhr.DONE) {
  90. return;
  91. }
  92. if (!this.response) {
  93. return resolve({});
  94. }
  95. var bytes = new Uint8Array(this.response);
  96. resolve({
  97. base64: (0, _ParseFileEncode.encodeBase64)(bytes),
  98. contentType: xhr.getResponseHeader('content-type')
  99. });
  100. };
  101. options.requestTask(xhr);
  102. xhr.send();
  103. });
  104. },
  105. deleteFile: function (name, options) {
  106. var headers = {
  107. 'X-Parse-Application-ID': _CoreManager.default.get('APPLICATION_ID')
  108. };
  109. if (options.useMasterKey) {
  110. headers['X-Parse-Master-Key'] = _CoreManager.default.get('MASTER_KEY');
  111. }
  112. var url = _CoreManager.default.get('SERVER_URL');
  113. if (url[url.length - 1] !== '/') {
  114. url += '/';
  115. }
  116. url += "files/" + name;
  117. return _CoreManager.default.getRESTController().ajax('DELETE', url, '', headers).catch(function (response) {
  118. if (!response || response === 'SyntaxError: Unexpected end of JSON input') {
  119. return Promise.resolve();
  120. }
  121. return _CoreManager.default.getRESTController().handleError(response);
  122. });
  123. },
  124. _setXHR: function (xhr) {
  125. XHR = xhr;
  126. },
  127. _getXHR: function () {
  128. return XHR;
  129. }
  130. };
  131. module.exports = DefaultController;