|
@@ -353,56 +353,57 @@ export const moveToStorage = function(fileObj, storageDestination, fileStoreStra
|
|
|
};
|
|
|
|
|
|
export const copyFile = function(fileObj, newCardId, fileStoreStrategyFactory) {
|
|
|
- const versionName = "original";
|
|
|
- const strategyRead = fileStoreStrategyFactory.getFileStrategy(fileObj, versionName);
|
|
|
- const readStream = strategyRead.getReadStream();
|
|
|
- const strategyWrite = fileStoreStrategyFactory.getFileStrategy(fileObj, versionName, STORAGE_NAME_FILESYSTEM);
|
|
|
+ Object.keys(fileObj.versions).forEach(versionName => {
|
|
|
+ const strategyRead = fileStoreStrategyFactory.getFileStrategy(fileObj, versionName);
|
|
|
+ const readStream = strategyRead.getReadStream();
|
|
|
+ const strategyWrite = fileStoreStrategyFactory.getFileStrategy(fileObj, versionName, STORAGE_NAME_FILESYSTEM);
|
|
|
|
|
|
- const tempPath = path.join(fileStoreStrategyFactory.storagePath, Random.id() + "-" + versionName + "-" + fileObj.name);
|
|
|
- const writeStream = strategyWrite.getWriteStream(tempPath);
|
|
|
+ const tempPath = path.join(fileStoreStrategyFactory.storagePath, Random.id() + "-" + versionName + "-" + fileObj.name);
|
|
|
+ const writeStream = strategyWrite.getWriteStream(tempPath);
|
|
|
|
|
|
- writeStream.on('error', error => {
|
|
|
- console.error('[writeStream error]: ', error, fileObj._id);
|
|
|
- });
|
|
|
+ writeStream.on('error', error => {
|
|
|
+ console.error('[writeStream error]: ', error, fileObj._id);
|
|
|
+ });
|
|
|
|
|
|
- readStream.on('error', error => {
|
|
|
- console.error('[readStream error]: ', error, fileObj._id);
|
|
|
- });
|
|
|
+ readStream.on('error', error => {
|
|
|
+ console.error('[readStream error]: ', error, fileObj._id);
|
|
|
+ });
|
|
|
|
|
|
- // https://forums.meteor.com/t/meteor-code-must-always-run-within-a-fiber-try-wrapping-callbacks-that-you-pass-to-non-meteor-libraries-with-meteor-bindenvironmen/40099/8
|
|
|
- readStream.on('end', Meteor.bindEnvironment(() => {
|
|
|
- const fileId = Random.id();
|
|
|
- Attachments.addFile(
|
|
|
- tempPath,
|
|
|
- {
|
|
|
- fileName: fileObj.name,
|
|
|
- type: fileObj.type,
|
|
|
- meta: {
|
|
|
- boardId: fileObj.meta.boardId,
|
|
|
- cardId: newCardId,
|
|
|
- listId: fileObj.meta.listId,
|
|
|
- swimlaneId: fileObj.meta.swimlaneId,
|
|
|
- source: 'copy',
|
|
|
- copyFrom: fileObj._id,
|
|
|
- copyStorage: strategyRead.getStorageName(),
|
|
|
+ // https://forums.meteor.com/t/meteor-code-must-always-run-within-a-fiber-try-wrapping-callbacks-that-you-pass-to-non-meteor-libraries-with-meteor-bindenvironmen/40099/8
|
|
|
+ readStream.on('end', Meteor.bindEnvironment(() => {
|
|
|
+ const fileId = Random.id();
|
|
|
+ Attachments.addFile(
|
|
|
+ tempPath,
|
|
|
+ {
|
|
|
+ fileName: fileObj.name,
|
|
|
+ type: fileObj.type,
|
|
|
+ meta: {
|
|
|
+ boardId: fileObj.meta.boardId,
|
|
|
+ cardId: newCardId,
|
|
|
+ listId: fileObj.meta.listId,
|
|
|
+ swimlaneId: fileObj.meta.swimlaneId,
|
|
|
+ source: 'copy',
|
|
|
+ copyFrom: fileObj._id,
|
|
|
+ copyStorage: strategyRead.getStorageName(),
|
|
|
+ },
|
|
|
+ userId: fileObj.userId,
|
|
|
+ size: fileObj.fileSize,
|
|
|
+ fileId,
|
|
|
},
|
|
|
- userId: fileObj.userId,
|
|
|
- size: fileObj.fileSize,
|
|
|
- fileId,
|
|
|
- },
|
|
|
- (err, fileRef) => {
|
|
|
- if (err) {
|
|
|
- console.log(err);
|
|
|
- } else {
|
|
|
- // Set the userId again
|
|
|
- Attachments.update({ _id: fileRef._id }, { $set: { userId: fileObj.userId } });
|
|
|
- }
|
|
|
- },
|
|
|
- true,
|
|
|
- );
|
|
|
- }));
|
|
|
+ (err, fileRef) => {
|
|
|
+ if (err) {
|
|
|
+ console.log(err);
|
|
|
+ } else {
|
|
|
+ // Set the userId again
|
|
|
+ Attachments.update({ _id: fileRef._id }, { $set: { userId: fileObj.userId } });
|
|
|
+ }
|
|
|
+ },
|
|
|
+ true,
|
|
|
+ );
|
|
|
+ }));
|
|
|
|
|
|
- readStream.pipe(writeStream);
|
|
|
+ readStream.pipe(writeStream);
|
|
|
+ });
|
|
|
};
|
|
|
|
|
|
export const rename = function(fileObj, newName, fileStoreStrategyFactory) {
|