ParseFileController.default.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. "use strict";
  2. var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
  3. var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
  4. var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
  5. var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
  6. var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
  7. var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
  8. var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
  9. var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
  10. var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
  11. var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
  12. var _promise = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/promise"));
  13. var _indexOf = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/index-of"));
  14. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
  15. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
  16. var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
  17. var _CoreManager = _interopRequireDefault(require("./CoreManager"));
  18. var _ParseFileEncode = require("./ParseFileEncode");
  19. function ownKeys(object, enumerableOnly) {
  20. var keys = _Object$keys(object);
  21. if (_Object$getOwnPropertySymbols) {
  22. var symbols = _Object$getOwnPropertySymbols(object);
  23. enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) {
  24. return _Object$getOwnPropertyDescriptor(object, sym).enumerable;
  25. })), keys.push.apply(keys, symbols);
  26. }
  27. return keys;
  28. }
  29. function _objectSpread(target) {
  30. for (var i = 1; i < arguments.length; i++) {
  31. var _context2, _context3;
  32. var source = null != arguments[i] ? arguments[i] : {};
  33. i % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(source), !0)).call(_context2, function (key) {
  34. (0, _defineProperty2.default)(target, key, source[key]);
  35. }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context3 = ownKeys(Object(source))).call(_context3, function (key) {
  36. _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key));
  37. });
  38. }
  39. return target;
  40. }
  41. var XHR = null;
  42. if (typeof XMLHttpRequest !== 'undefined') {
  43. XHR = XMLHttpRequest;
  44. }
  45. XHR = require('./Xhr.weapp');
  46. var DefaultController = {
  47. saveFile: function () {
  48. var _saveFile = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(name
  49. /*: string*/
  50. , source
  51. /*: FileSource*/
  52. , options
  53. /*:: ?: FullOptions*/
  54. ) {
  55. var base64Data, _base64Data$split, _base64Data$split2, first, second, data, newSource;
  56. return _regenerator.default.wrap(function (_context) {
  57. while (1) {
  58. switch (_context.prev = _context.next) {
  59. case 0:
  60. if (!(source.format !== 'file')) {
  61. _context.next = 2;
  62. break;
  63. }
  64. throw new Error('saveFile can only be used with File-type sources.');
  65. case 2:
  66. _context.next = 4;
  67. return new _promise.default(function (res, rej) {
  68. // eslint-disable-next-line no-undef
  69. var reader = new FileReader();
  70. reader.onload = function () {
  71. return res(reader.result);
  72. };
  73. reader.onerror = function (error) {
  74. return rej(error);
  75. };
  76. reader.readAsDataURL(source.file);
  77. });
  78. case 4:
  79. base64Data = _context.sent; // we only want the data after the comma
  80. // For example: "data:application/pdf;base64,JVBERi0xLjQKJ..." we would only want "JVBERi0xLjQKJ..."
  81. _base64Data$split = base64Data.split(','), _base64Data$split2 = (0, _slicedToArray2.default)(_base64Data$split, 2), first = _base64Data$split2[0], second = _base64Data$split2[1]; // in the event there is no 'data:application/pdf;base64,' at the beginning of the base64 string
  82. // use the entire string instead
  83. data = second ? second : first;
  84. newSource = {
  85. format: 'base64',
  86. base64: data,
  87. type: source.type || (source.file ? source.file.type : null)
  88. };
  89. _context.next = 10;
  90. return DefaultController.saveBase64(name, newSource, options);
  91. case 10:
  92. return _context.abrupt("return", _context.sent);
  93. case 11:
  94. case "end":
  95. return _context.stop();
  96. }
  97. }
  98. }, _callee);
  99. }));
  100. return function () {
  101. return _saveFile.apply(this, arguments);
  102. };
  103. }(),
  104. saveBase64: function (name
  105. /*: string*/
  106. , source
  107. /*: FileSource*/
  108. , options
  109. /*:: ?: FullOptions*/
  110. ) {
  111. if (source.format !== 'base64') {
  112. throw new Error('saveBase64 can only be used with Base64-type sources.');
  113. }
  114. var data
  115. /*: { base64: any, _ContentType?: any, fileData: Object }*/
  116. = {
  117. base64: source.base64,
  118. fileData: {
  119. ipfs: options.ipfs,
  120. metadata: _objectSpread({}, options.metadata),
  121. tags: _objectSpread({}, options.tags)
  122. }
  123. };
  124. delete options.metadata;
  125. delete options.tags;
  126. if (source.type) {
  127. data._ContentType = source.type;
  128. }
  129. var path = "files/".concat(name);
  130. return _CoreManager.default.getRESTController().request('POST', path, data, options);
  131. },
  132. download: function (uri, options) {
  133. if (XHR) {
  134. return this.downloadAjax(uri, options);
  135. }
  136. return _promise.default.reject('Cannot make a request: No definition of XMLHttpRequest was found.');
  137. },
  138. downloadAjax: function (uri, options) {
  139. return new _promise.default(function (resolve, reject) {
  140. var xhr = new XHR();
  141. xhr.open('GET', uri, true);
  142. xhr.responseType = 'arraybuffer';
  143. xhr.onerror = function (e) {
  144. reject(e);
  145. };
  146. xhr.onreadystatechange = function () {
  147. if (xhr.readyState !== xhr.DONE) {
  148. return;
  149. }
  150. if (!this.response) {
  151. return resolve({});
  152. }
  153. var bytes = new Uint8Array(this.response);
  154. resolve({
  155. base64: (0, _ParseFileEncode.encodeBase64)(bytes),
  156. contentType: xhr.getResponseHeader('content-type')
  157. });
  158. };
  159. options.requestTask(xhr);
  160. xhr.send();
  161. });
  162. },
  163. deleteFile: function (name
  164. /*: string*/
  165. , options
  166. /*:: ?: FullOptions*/
  167. ) {
  168. var headers = {
  169. 'X-Parse-Application-ID': _CoreManager.default.get('APPLICATION_ID')
  170. };
  171. if (options.useMasterKey) {
  172. headers['X-Parse-Master-Key'] = _CoreManager.default.get('MASTER_KEY');
  173. }
  174. var url = _CoreManager.default.get('SERVER_URL');
  175. if (url[url.length - 1] !== '/') {
  176. url += '/';
  177. }
  178. url += "files/".concat(name);
  179. return _CoreManager.default.getRESTController().ajax('DELETE', url, '', headers).catch(function (response) {
  180. // TODO: return JSON object in server
  181. if (!response || response === 'SyntaxError: Unexpected end of JSON input') {
  182. return _promise.default.resolve();
  183. }
  184. return _CoreManager.default.getRESTController().handleError(response);
  185. });
  186. },
  187. _setXHR: function (xhr
  188. /*: any*/
  189. ) {
  190. XHR = xhr;
  191. },
  192. _getXHR: function () {
  193. return XHR;
  194. }
  195. };
  196. module.exports = DefaultController;