mizozobu 3 лет назад
Родитель
Сommit
fae4d476bd

+ 6 - 0
packages/app/src/server/routes/apiv3/g2g-transfer.ts

@@ -146,6 +146,12 @@ module.exports = (crowi: Crowi): Router => {
   const receiveRouter = express.Router();
   const receiveRouter = express.Router();
   const pushRouter = express.Router();
   const pushRouter = express.Router();
 
 
+  // eslint-disable-next-line max-len
+  receiveRouter.get('/attachments', verifyAndExtractTransferKey, async(req: Request & { transferKey: TransferKey, operatorUserId: string }, res: ApiV3Response) => {
+    const readStream = crowi.exportService.createExportCollectionStream('attachments');
+    return readStream.pipe(res);
+  });
+
   // Auto import
   // Auto import
   // eslint-disable-next-line max-len
   // eslint-disable-next-line max-len
   receiveRouter.post('/', uploads.single('transferDataZipFile'), verifyAndExtractTransferKey, async(req: Request & { transferKey: TransferKey, operatorUserId: string }, res: ApiV3Response) => {
   receiveRouter.post('/', uploads.single('transferDataZipFile'), verifyAndExtractTransferKey, async(req: Request & { transferKey: TransferKey, operatorUserId: string }, res: ApiV3Response) => {

+ 17 - 0
packages/app/src/server/service/export.js

@@ -164,6 +164,23 @@ class ExportService {
     return transformStream;
     return transformStream;
   }
   }
 
 
+  /**
+   * dump a mongodb collection into json
+   *
+   * @memberOf ExportService
+   * @param {string} collectionName collection name
+   * @return {NodeJS.ReadStream} readstream for the collection
+   */
+  createExportCollectionStream(collectionName) {
+    const collection = mongoose.connection.collection(collectionName);
+    const nativeCursor = collection.find();
+    const readStream = nativeCursor.stream({ transform: JSON.stringify });
+    const transformStream = this.generateTransformStream();
+
+    return readStream
+      .pipe(transformStream);
+  }
+
   /**
   /**
    * dump a mongodb collection into json
    * dump a mongodb collection into json
    *
    *