files.com 1.0.205 → 1.0.208
Sign up to get free protection for your applications and to get access to all the features.
- package/_VERSION +1 -1
- package/lib/models/File.js +77 -49
- package/package.json +1 -1
- package/src/models/File.js +58 -31
package/_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.208
|
package/lib/models/File.js
CHANGED
@@ -900,15 +900,15 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
900
900
|
this.options = _objectSpread({}, options);
|
901
901
|
});
|
902
902
|
(0, _defineProperty2.default)(File, "_openUpload", /*#__PURE__*/function () {
|
903
|
-
var _ref13 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(path) {
|
903
|
+
var _ref13 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(path, paramsRaw) {
|
904
904
|
var params, response, partData;
|
905
905
|
return _regenerator.default.wrap(function _callee11$(_context11) {
|
906
906
|
while (1) {
|
907
907
|
switch (_context11.prev = _context11.next) {
|
908
908
|
case 0:
|
909
|
-
params = {
|
909
|
+
params = _objectSpread(_objectSpread({}, paramsRaw), {}, {
|
910
910
|
action: 'put'
|
911
|
-
};
|
911
|
+
});
|
912
912
|
_context11.next = 3;
|
913
913
|
return _Api.default.sendRequest("/files/".concat(encodeURIComponent(path)), 'POST', params);
|
914
914
|
|
@@ -937,7 +937,7 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
937
937
|
}, _callee11);
|
938
938
|
}));
|
939
939
|
|
940
|
-
return function (_x5) {
|
940
|
+
return function (_x5, _x6) {
|
941
941
|
return _ref13.apply(this, arguments);
|
942
942
|
};
|
943
943
|
}());
|
@@ -981,12 +981,12 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
981
981
|
}, _callee12);
|
982
982
|
}));
|
983
983
|
|
984
|
-
return function (
|
984
|
+
return function (_x7, _x8, _x9) {
|
985
985
|
return _ref14.apply(this, arguments);
|
986
986
|
};
|
987
987
|
}());
|
988
988
|
(0, _defineProperty2.default)(File, "_completeUpload", /*#__PURE__*/function () {
|
989
|
-
var _ref15 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13(
|
989
|
+
var _ref15 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13(firstFileUploadPart) {
|
990
990
|
var params;
|
991
991
|
return _regenerator.default.wrap(function _callee13$(_context13) {
|
992
992
|
while (1) {
|
@@ -994,9 +994,9 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
994
994
|
case 0:
|
995
995
|
params = {
|
996
996
|
action: 'end',
|
997
|
-
ref:
|
997
|
+
ref: firstFileUploadPart.ref
|
998
998
|
};
|
999
|
-
return _context13.abrupt("return", _Api.default.sendRequest("/files/".concat(encodeURIComponent(
|
999
|
+
return _context13.abrupt("return", _Api.default.sendRequest("/files/".concat(encodeURIComponent(firstFileUploadPart.path)), 'POST', params));
|
1000
1000
|
|
1001
1001
|
case 2:
|
1002
1002
|
case "end":
|
@@ -1006,24 +1006,24 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
1006
1006
|
}, _callee13);
|
1007
1007
|
}));
|
1008
1008
|
|
1009
|
-
return function (
|
1009
|
+
return function (_x10) {
|
1010
1010
|
return _ref15.apply(this, arguments);
|
1011
1011
|
};
|
1012
1012
|
}());
|
1013
1013
|
(0, _defineProperty2.default)(File, "uploadStream", /*#__PURE__*/function () {
|
1014
|
-
var _ref16 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16(destinationPath, readableStream) {
|
1015
|
-
var
|
1014
|
+
var _ref16 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16(destinationPath, readableStream, params) {
|
1015
|
+
var firstFileUploadPart, file;
|
1016
1016
|
return _regenerator.default.wrap(function _callee16$(_context16) {
|
1017
1017
|
while (1) {
|
1018
1018
|
switch (_context16.prev = _context16.next) {
|
1019
1019
|
case 0:
|
1020
1020
|
_context16.next = 2;
|
1021
|
-
return File._openUpload(destinationPath);
|
1021
|
+
return File._openUpload(destinationPath, params);
|
1022
1022
|
|
1023
1023
|
case 2:
|
1024
|
-
|
1024
|
+
firstFileUploadPart = _context16.sent;
|
1025
1025
|
|
1026
|
-
if (
|
1026
|
+
if (firstFileUploadPart) {
|
1027
1027
|
_context16.next = 5;
|
1028
1028
|
break;
|
1029
1029
|
}
|
@@ -1037,50 +1037,66 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
1037
1037
|
var part = 0;
|
1038
1038
|
var chunks = [];
|
1039
1039
|
var length = 0;
|
1040
|
+
var concurrentUploads = [];
|
1040
1041
|
readableStream.on('error', function (error) {
|
1041
1042
|
reject(error);
|
1042
1043
|
});
|
1043
1044
|
readableStream.on('data', /*#__PURE__*/function () {
|
1044
1045
|
var _ref17 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14(chunk) {
|
1045
|
-
var buffer, nextFileUploadPart;
|
1046
|
+
var nextLength, excessLength, chunkBuffer, lastChunkForPart, firstChunkForNextPart, buffer, nextFileUploadPart;
|
1046
1047
|
return _regenerator.default.wrap(function _callee14$(_context14) {
|
1047
1048
|
while (1) {
|
1048
1049
|
switch (_context14.prev = _context14.next) {
|
1049
1050
|
case 0:
|
1050
|
-
|
1051
|
+
_context14.prev = 0;
|
1052
|
+
nextLength = length + chunk.length;
|
1053
|
+
excessLength = nextLength - firstFileUploadPart.partsize;
|
1054
|
+
chunkBuffer = _safeBuffer.Buffer.from(chunk);
|
1051
1055
|
|
1052
|
-
if (!(
|
1053
|
-
_context14.next =
|
1056
|
+
if (!(excessLength > 0)) {
|
1057
|
+
_context14.next = 19;
|
1054
1058
|
break;
|
1055
1059
|
}
|
1056
1060
|
|
1057
1061
|
readableStream.pause();
|
1062
|
+
lastChunkForPart = chunkBuffer.subarray(0, excessLength);
|
1063
|
+
firstChunkForNextPart = chunkBuffer.subarray(excessLength);
|
1064
|
+
chunks.push(lastChunkForPart);
|
1058
1065
|
buffer = _safeBuffer.Buffer.concat(chunks);
|
1059
|
-
_context14.next =
|
1060
|
-
return File._continueUpload(destinationPath, ++part,
|
1066
|
+
_context14.next = 12;
|
1067
|
+
return File._continueUpload(destinationPath, ++part, firstFileUploadPart);
|
1061
1068
|
|
1062
|
-
case
|
1069
|
+
case 12:
|
1063
1070
|
nextFileUploadPart = _context14.sent;
|
1064
|
-
|
1065
|
-
|
1066
|
-
|
1067
|
-
case 9:
|
1068
|
-
chunks = [];
|
1069
|
-
length = 0;
|
1071
|
+
concurrentUploads.push(_Api.default.sendFilePart(nextFileUploadPart.upload_uri, 'PUT', buffer));
|
1072
|
+
chunks = [firstChunkForNextPart];
|
1073
|
+
length = 1;
|
1070
1074
|
readableStream.resume();
|
1075
|
+
_context14.next = 21;
|
1076
|
+
break;
|
1071
1077
|
|
1072
|
-
case
|
1073
|
-
chunks.push(
|
1078
|
+
case 19:
|
1079
|
+
chunks.push(chunkBuffer);
|
1080
|
+
length += chunk.length;
|
1081
|
+
|
1082
|
+
case 21:
|
1083
|
+
_context14.next = 26;
|
1084
|
+
break;
|
1074
1085
|
|
1075
|
-
case
|
1086
|
+
case 23:
|
1087
|
+
_context14.prev = 23;
|
1088
|
+
_context14.t0 = _context14["catch"](0);
|
1089
|
+
reject(_context14.t0);
|
1090
|
+
|
1091
|
+
case 26:
|
1076
1092
|
case "end":
|
1077
1093
|
return _context14.stop();
|
1078
1094
|
}
|
1079
1095
|
}
|
1080
|
-
}, _callee14);
|
1096
|
+
}, _callee14, null, [[0, 23]]);
|
1081
1097
|
}));
|
1082
1098
|
|
1083
|
-
return function (
|
1099
|
+
return function (_x14) {
|
1084
1100
|
return _ref17.apply(this, arguments);
|
1085
1101
|
};
|
1086
1102
|
}());
|
@@ -1090,35 +1106,47 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
1090
1106
|
while (1) {
|
1091
1107
|
switch (_context15.prev = _context15.next) {
|
1092
1108
|
case 0:
|
1109
|
+
_context15.prev = 0;
|
1110
|
+
|
1093
1111
|
if (!(chunks.length > 0)) {
|
1094
1112
|
_context15.next = 7;
|
1095
1113
|
break;
|
1096
1114
|
}
|
1097
1115
|
|
1098
1116
|
buffer = _safeBuffer.Buffer.concat(chunks);
|
1099
|
-
_context15.next =
|
1100
|
-
return File._continueUpload(destinationPath, ++part,
|
1117
|
+
_context15.next = 5;
|
1118
|
+
return File._continueUpload(destinationPath, ++part, firstFileUploadPart);
|
1101
1119
|
|
1102
|
-
case
|
1120
|
+
case 5:
|
1103
1121
|
nextFileUploadPart = _context15.sent;
|
1104
|
-
|
1105
|
-
return _Api.default.sendFilePart(nextFileUploadPart.upload_uri, 'PUT', buffer);
|
1122
|
+
concurrentUploads.push(_Api.default.sendFilePart(nextFileUploadPart.upload_uri, 'PUT', buffer));
|
1106
1123
|
|
1107
1124
|
case 7:
|
1108
1125
|
_context15.next = 9;
|
1109
|
-
return
|
1126
|
+
return Promise.all(concurrentUploads);
|
1110
1127
|
|
1111
1128
|
case 9:
|
1129
|
+
_context15.next = 11;
|
1130
|
+
return File._completeUpload(firstFileUploadPart);
|
1131
|
+
|
1132
|
+
case 11:
|
1112
1133
|
response = _context15.sent;
|
1113
1134
|
createdFile = new File(response.data);
|
1114
1135
|
resolve(createdFile);
|
1136
|
+
_context15.next = 19;
|
1137
|
+
break;
|
1138
|
+
|
1139
|
+
case 16:
|
1140
|
+
_context15.prev = 16;
|
1141
|
+
_context15.t0 = _context15["catch"](0);
|
1142
|
+
reject(_context15.t0);
|
1115
1143
|
|
1116
|
-
case
|
1144
|
+
case 19:
|
1117
1145
|
case "end":
|
1118
1146
|
return _context15.stop();
|
1119
1147
|
}
|
1120
1148
|
}
|
1121
|
-
}, _callee15);
|
1149
|
+
}, _callee15, null, [[0, 16]]);
|
1122
1150
|
})));
|
1123
1151
|
});
|
1124
1152
|
|
@@ -1139,12 +1167,12 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
1139
1167
|
}, _callee16, null, [[5, 12]]);
|
1140
1168
|
}));
|
1141
1169
|
|
1142
|
-
return function (
|
1170
|
+
return function (_x11, _x12, _x13) {
|
1143
1171
|
return _ref16.apply(this, arguments);
|
1144
1172
|
};
|
1145
1173
|
}());
|
1146
1174
|
(0, _defineProperty2.default)(File, "uploadData", /*#__PURE__*/function () {
|
1147
|
-
var _ref19 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17(destinationPath, data) {
|
1175
|
+
var _ref19 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17(destinationPath, data, params) {
|
1148
1176
|
return _regenerator.default.wrap(function _callee17$(_context17) {
|
1149
1177
|
while (1) {
|
1150
1178
|
switch (_context17.prev = _context17.next) {
|
@@ -1157,7 +1185,7 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
1157
1185
|
throw new errors.MissingParameterError('Upload data was not provided');
|
1158
1186
|
|
1159
1187
|
case 2:
|
1160
|
-
return _context17.abrupt("return", File.uploadStream(destinationPath, _readableStream.default.from(data)));
|
1188
|
+
return _context17.abrupt("return", File.uploadStream(destinationPath, _readableStream.default.from(data), params));
|
1161
1189
|
|
1162
1190
|
case 3:
|
1163
1191
|
case "end":
|
@@ -1167,12 +1195,12 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
1167
1195
|
}, _callee17);
|
1168
1196
|
}));
|
1169
1197
|
|
1170
|
-
return function (
|
1198
|
+
return function (_x15, _x16, _x17) {
|
1171
1199
|
return _ref19.apply(this, arguments);
|
1172
1200
|
};
|
1173
1201
|
}());
|
1174
1202
|
(0, _defineProperty2.default)(File, "uploadFile", /*#__PURE__*/function () {
|
1175
|
-
var _ref20 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18(destinationPath, sourceFilePath) {
|
1203
|
+
var _ref20 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18(destinationPath, sourceFilePath, params) {
|
1176
1204
|
var _require3, openDiskFileReadStream, stream;
|
1177
1205
|
|
1178
1206
|
return _regenerator.default.wrap(function _callee18$(_context18) {
|
@@ -1189,7 +1217,7 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
1189
1217
|
case 2:
|
1190
1218
|
_require3 = require('../isomorphic/File.node.js'), openDiskFileReadStream = _require3.openDiskFileReadStream;
|
1191
1219
|
stream = openDiskFileReadStream(sourceFilePath);
|
1192
|
-
return _context18.abrupt("return", File.uploadStream(destinationPath, stream));
|
1220
|
+
return _context18.abrupt("return", File.uploadStream(destinationPath, stream, params));
|
1193
1221
|
|
1194
1222
|
case 5:
|
1195
1223
|
case "end":
|
@@ -1199,7 +1227,7 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
1199
1227
|
}, _callee18);
|
1200
1228
|
}));
|
1201
1229
|
|
1202
|
-
return function (
|
1230
|
+
return function (_x18, _x19, _x20) {
|
1203
1231
|
return _ref20.apply(this, arguments);
|
1204
1232
|
};
|
1205
1233
|
}());
|
@@ -1329,7 +1357,7 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
1329
1357
|
}, _callee19);
|
1330
1358
|
}));
|
1331
1359
|
|
1332
|
-
return function (
|
1360
|
+
return function (_x21) {
|
1333
1361
|
return _ref21.apply(this, arguments);
|
1334
1362
|
};
|
1335
1363
|
}());
|
@@ -1395,7 +1423,7 @@ var File = /*#__PURE__*/(0, _createClass2.default)(function File() {
|
|
1395
1423
|
}, _callee20);
|
1396
1424
|
}));
|
1397
1425
|
|
1398
|
-
return function (
|
1426
|
+
return function (_x22) {
|
1399
1427
|
return _ref22.apply(this, arguments);
|
1400
1428
|
};
|
1401
1429
|
}());
|
package/package.json
CHANGED
package/src/models/File.js
CHANGED
@@ -28,8 +28,8 @@ class File {
|
|
28
28
|
}
|
29
29
|
|
30
30
|
isLoaded = () => !!this.attributes.path
|
31
|
-
static _openUpload = async path => {
|
32
|
-
const params = { action: 'put' }
|
31
|
+
static _openUpload = async (path, paramsRaw) => {
|
32
|
+
const params = { ...paramsRaw, action: 'put' }
|
33
33
|
const response = await Api.sendRequest(`/files/${encodeURIComponent(path)}`, 'POST', params)
|
34
34
|
|
35
35
|
if (!response) {
|
@@ -67,19 +67,22 @@ class File {
|
|
67
67
|
return new FileUploadPart(partData)
|
68
68
|
}
|
69
69
|
|
70
|
-
static _completeUpload = async
|
70
|
+
static _completeUpload = async firstFileUploadPart => {
|
71
71
|
const params = {
|
72
72
|
action: 'end',
|
73
|
-
ref:
|
73
|
+
ref: firstFileUploadPart.ref,
|
74
74
|
}
|
75
75
|
|
76
|
-
return Api.sendRequest(`/files/${encodeURIComponent(
|
76
|
+
return Api.sendRequest(`/files/${encodeURIComponent(firstFileUploadPart.path)}`, 'POST', params)
|
77
77
|
}
|
78
78
|
|
79
|
-
|
80
|
-
|
79
|
+
/**
|
80
|
+
* @note see File.copy() for list of supported params
|
81
|
+
*/
|
82
|
+
static uploadStream = async (destinationPath, readableStream, params) => {
|
83
|
+
const firstFileUploadPart = await File._openUpload(destinationPath, params)
|
81
84
|
|
82
|
-
if (!
|
85
|
+
if (!firstFileUploadPart) {
|
83
86
|
return
|
84
87
|
}
|
85
88
|
|
@@ -88,41 +91,61 @@ class File {
|
|
88
91
|
let part = 0
|
89
92
|
let chunks = []
|
90
93
|
let length = 0
|
94
|
+
const concurrentUploads = []
|
91
95
|
|
92
96
|
readableStream.on('error', error => { reject(error) })
|
93
97
|
|
94
98
|
readableStream.on('data', async chunk => {
|
95
|
-
|
99
|
+
try {
|
100
|
+
const nextLength = length + chunk.length
|
101
|
+
const excessLength = nextLength - firstFileUploadPart.partsize
|
96
102
|
|
97
|
-
|
98
|
-
readableStream.pause()
|
103
|
+
const chunkBuffer = Buffer.from(chunk)
|
99
104
|
|
100
|
-
|
101
|
-
|
105
|
+
if (excessLength > 0) {
|
106
|
+
readableStream.pause()
|
102
107
|
|
103
|
-
|
108
|
+
const lastChunkForPart = chunkBuffer.subarray(0, excessLength)
|
109
|
+
const firstChunkForNextPart = chunkBuffer.subarray(excessLength)
|
104
110
|
|
105
|
-
|
106
|
-
length = 0
|
111
|
+
chunks.push(lastChunkForPart)
|
107
112
|
|
108
|
-
|
109
|
-
|
113
|
+
const buffer = Buffer.concat(chunks)
|
114
|
+
const nextFileUploadPart = await File._continueUpload(destinationPath, ++part, firstFileUploadPart)
|
115
|
+
|
116
|
+
concurrentUploads.push(Api.sendFilePart(nextFileUploadPart.upload_uri, 'PUT', buffer))
|
117
|
+
|
118
|
+
chunks = [firstChunkForNextPart]
|
119
|
+
length = 1
|
110
120
|
|
111
|
-
|
121
|
+
readableStream.resume()
|
122
|
+
} else {
|
123
|
+
chunks.push(chunkBuffer)
|
124
|
+
length += chunk.length
|
125
|
+
}
|
126
|
+
} catch (error) {
|
127
|
+
reject(error)
|
128
|
+
}
|
112
129
|
})
|
113
130
|
|
114
131
|
readableStream.on('end', async () => {
|
115
|
-
|
116
|
-
|
117
|
-
|
132
|
+
try {
|
133
|
+
if (chunks.length > 0) {
|
134
|
+
const buffer = Buffer.concat(chunks)
|
135
|
+
const nextFileUploadPart = await File._continueUpload(destinationPath, ++part, firstFileUploadPart)
|
118
136
|
|
119
|
-
|
120
|
-
|
137
|
+
concurrentUploads.push(Api.sendFilePart(nextFileUploadPart.upload_uri, 'PUT', buffer))
|
138
|
+
}
|
139
|
+
|
140
|
+
await Promise.all(concurrentUploads)
|
121
141
|
|
122
|
-
|
123
|
-
|
142
|
+
const response = await File._completeUpload(firstFileUploadPart)
|
143
|
+
const createdFile = new File(response.data)
|
124
144
|
|
125
|
-
|
145
|
+
resolve(createdFile)
|
146
|
+
} catch (error) {
|
147
|
+
reject(error)
|
148
|
+
}
|
126
149
|
})
|
127
150
|
})
|
128
151
|
|
@@ -134,16 +157,20 @@ class File {
|
|
134
157
|
|
135
158
|
/**
|
136
159
|
* data - string, Buffer, Stream, any object implementing Symbol.iterator or Symbol.asyncIterator
|
160
|
+
* @note see File.copy() for list of supported params
|
137
161
|
*/
|
138
|
-
static uploadData = async (destinationPath, data) => {
|
162
|
+
static uploadData = async (destinationPath, data, params) => {
|
139
163
|
if (!data) {
|
140
164
|
throw new errors.MissingParameterError('Upload data was not provided')
|
141
165
|
}
|
142
166
|
|
143
|
-
return File.uploadStream(destinationPath, Readable.from(data))
|
167
|
+
return File.uploadStream(destinationPath, Readable.from(data), params)
|
144
168
|
}
|
145
169
|
|
146
|
-
|
170
|
+
/**
|
171
|
+
* @note see File.copy() for list of supported params
|
172
|
+
*/
|
173
|
+
static uploadFile = async (destinationPath, sourceFilePath, params) => {
|
147
174
|
if (isBrowser()) {
|
148
175
|
throw new errors.NotImplementedError('Disk file uploads are only available in a NodeJS environment')
|
149
176
|
}
|
@@ -151,7 +178,7 @@ class File {
|
|
151
178
|
const { openDiskFileReadStream } = require('../isomorphic/File.node.js')
|
152
179
|
const stream = openDiskFileReadStream(sourceFilePath)
|
153
180
|
|
154
|
-
return File.uploadStream(destinationPath, stream)
|
181
|
+
return File.uploadStream(destinationPath, stream, params)
|
155
182
|
}
|
156
183
|
|
157
184
|
downloadToStream = async writableStream => {
|