yusuketk пре 5 година
родитељ
комит
e2d7a4b084
2 измењених фајлова са 11 додато и 16 уклоњено
  1. 1 12
      src/client/js/components/Page/PageShareManagement.jsx
  2. 10 4
      src/server/routes/apiv3/page.js

+ 1 - 12
src/client/js/components/Page/PageShareManagement.jsx

@@ -28,18 +28,7 @@ const PageShareManagement = (props) => {
 
 
   async function exportPageHandler() {
   async function exportPageHandler() {
     const { pageId, revisionId } = pageContainer.state;
     const { pageId, revisionId } = pageContainer.state;
-    try {
-      const { data } = await appContainer.apiv3Get('/page/export', { pageId, revisionId });
-      const blob = new Blob([data.markdown]);
-      const link = document.createElement('a');
-      link.href = window.URL.createObjectURL(blob);
-      link.download = `${revisionId}.md`;
-      link.click();
-      link.remove();
-    }
-    catch (err) {
-      toastError(Error(t('export_bulk.failed_to_export')));
-    }
+    window.location.href = `/_api/v3/page/export/${pageId}?_csrf=${appContainer.csrfToken}&format=md&revisionId=${revisionId}&contentType=text/markdown`;
   }
   }
 
 
   function renderModals() {
   function renderModals() {

+ 10 - 4
src/server/routes/apiv3/page.js

@@ -125,7 +125,6 @@ module.exports = (crowi) => {
       body('bool').isBoolean(),
       body('bool').isBoolean(),
     ],
     ],
     export: [
     export: [
-      query('pageId').isString(),
       query('revisionId').isString(),
       query('revisionId').isString(),
     ],
     ],
   };
   };
@@ -197,9 +196,10 @@ module.exports = (crowi) => {
   *          200:
   *          200:
   *            description: Return page's markdown
   *            description: Return page's markdown
   */
   */
-  router.get('/export', validator.export, async(req, res) => {
+  router.get('/export/:pageId', validator.export, async(req, res) => {
     try {
     try {
-      const { pageId = null, revisionId = null } = req.query;
+      const { pageId } = req.params;
+      const { revisionId = null } = req.query;
 
 
       if (pageId == null) {
       if (pageId == null) {
         return res.apiv3Err(new ErrorV3('Should provided pageId or both pageId and revisionId.'));
         return res.apiv3Err(new ErrorV3('Should provided pageId or both pageId and revisionId.'));
@@ -231,7 +231,13 @@ module.exports = (crowi) => {
 
 
       const markdown = revision.body;
       const markdown = revision.body;
 
 
-      return res.apiv3({ markdown });
+      const Readable = require('stream').Readable;
+      const readable = new Readable();
+      readable._read = () => {}; 
+      readable.push(markdown);
+      readable.push(null);
+      res.set('Content-Type', 'text/markdown');
+      return readable.pipe(res);
     }
     }
     catch (err) {
     catch (err) {
       logger.error('Failed to get markdown', err);
       logger.error('Failed to get markdown', err);