Bläddra i källkod

fix(server): 修复pdf下载

Go 4 år sedan
förälder
incheckning
22dc9e0008

+ 24 - 9
front/project/admin/routes/course/dataHistory/page.js

@@ -9,7 +9,7 @@ import Block from '@src/components/Block';
 // import EditTableCell from '@src/components/EditTableCell';
 import ActionLayout from '@src/layouts/ActionLayout';
 import TableLayout from '@src/layouts/TableLayout';
-import { formatDate } from '@src/services/Tools';
+import { formatFormError, formatDate } from '@src/services/Tools';
 import { asyncSMessage, asyncForm, asyncDelConfirm } from '@src/services/AsyncTools';
 // import { SwitchSelect, DataType } from '../../../../Constant';
 // import { User } from '../../../stores/user';
@@ -114,6 +114,21 @@ export default class extends Page {
       });
   }
 
+  submit() {
+    const { form } = this.props;
+    form.validateFields((err, values) => {
+      console.log(values);
+      if (!err) {
+        const data = form.getFieldsValue();
+        Course.editData(data).then(() => {
+          asyncSMessage('保存成功');
+        }).catch((e) => {
+          if (e.result) form.setFields(formatFormError(data, e.result));
+        });
+      }
+    });
+  }
+
   refreshHistory() {
     const { id } = this.params;
     Course.listDataHistory({ dataId: id }).then(result => {
@@ -155,6 +170,7 @@ export default class extends Page {
     const trailResource = getFieldValue('trailResource');
     return <Block>
       <h1>资料文件</h1>
+      {getFieldDecorator('id')(<input hidden />)}
       <Form.Item labelCol={{ span: 5 }} wrapperCol={{ span: 16 }} label='正式版本'>
         {resource && <a href={resource} target="_blank">访问</a>}
         {getFieldDecorator('resource', {
@@ -191,6 +207,13 @@ export default class extends Page {
           </Upload>,
         )}
       </Form.Item>
+      <Row type="flex" justify="center">
+        <Col>
+          <Button type="primary" onClick={() => {
+            this.submit();
+          }}>保存</Button>
+        </Col>
+      </Row>
     </Block>;
   }
 
@@ -219,14 +242,6 @@ export default class extends Page {
     return <div flex>
       {this.renderFile()}
       {history && this.renderHistory()}
-
-      <Row type="flex" justify="center">
-        <Col>
-          <Button type="primary" onClick={() => {
-            this.submit();
-          }}>保存</Button>
-        </Col>
-      </Row>
     </div>;
   }
 }

+ 2 - 2
front/project/admin/routes/subject/textbookQuestion/page.js

@@ -7,7 +7,7 @@ import Page from '@src/containers/Page';
 import Block from '@src/components/Block';
 import Select from '@src/components/Select';
 // import FileUpload from '@src/components/FileUpload';
-import { formatFormError, generateSearch, getMap } from '@src/services/Tools';
+import { formatDate, formatFormError, generateSearch, getMap } from '@src/services/Tools';
 import { asyncSMessage } from '@src/services/AsyncTools';
 import { TextbookType, QuestionStyleType } from '../../../../Constant';
 import { Textbook } from '../../../stores/textbook';
@@ -90,7 +90,7 @@ export default class extends Page {
           return Textbook.listLibrary(search);
         }, (row) => {
           return {
-            title: `${row.startDate} - ${row.endDate || '至今'}`,
+            title: `${formatDate(row.startDate, 'YYYY-MM-DD')} - ${row.endDate ? formatDate(row.endDate, 'YYYY-MM-DD') : '至今'}`,
             value: row.id,
           };
         }, result.libraryId, null);

+ 1 - 1
front/project/www/components/OtherModal/index.js

@@ -687,7 +687,7 @@ export class DownloadModal extends Component {
       if (!checkMap[key]) return;
       const link = data[`${key}`];
       if (link) {
-        openLink(link);
+        openLink(`${link}&download=true`);
       }
     });
     this.setState({ checkList: [] });

+ 1 - 1
front/project/www/routes/my/tools/page.js

@@ -505,7 +505,7 @@ export default class extends Page {
                       hidden={item.resource === item.trailResource}
                       className="white"
                       onClick={() => {
-                        openLink(item.resource);
+                        openLink(`${item.resource}&download=true`);
                       }}
                     >
                       下载

+ 10 - 6
server/gateway-api/src/main/java/com/qxgmat/controller/api/MyController.java

@@ -2242,7 +2242,7 @@ public class MyController {
 
     @RequestMapping(value = "/download/data", method = RequestMethod.GET)
     @ApiOperation(value = "获取资料", httpMethod = "GET")
-    public void dataDownload(@RequestParam(required = true) Integer id, HttpServletRequest request, HttpServletResponse response){
+    public void dataDownload(@RequestParam(required = true) Integer id, @RequestParam(required = false) boolean download, HttpServletRequest request, HttpServletResponse response){
         User user = (User) shiroHelp.getLoginUser();
         CourseData courseData = courseDataService.get(id);
         if (!userOrderRecordService.hasData(user.getId(), courseData.getId())){
@@ -2252,8 +2252,10 @@ public class MyController {
             String resource = courseData.getResource();
             String fileName = pdfHelp.generatePdfImage(user, resource, false);
             String fileUrl = pdfHelp.getOfflineUrl(fileName);
-            response.setHeader("content-disposition","attachment;filename="+Tools.stringMD5(fileName)+fileName.substring(fileName.lastIndexOf(".")));
-            response.setHeader("content-type", "application/pdf");
+            if (download){
+                response.setHeader("content-disposition","attachment;filename="+Tools.stringMD5(fileName)+fileName.substring(fileName.lastIndexOf(".")));
+                response.setHeader("content-type", "application/pdf");
+            }
             response.setHeader("X-Accel-Redirect", fileUrl);
 //            FileInputStream fileInputStream = new FileInputStream(fileName);
 //            ServletOutputStream outputStream = response.getOutputStream();
@@ -2271,7 +2273,7 @@ public class MyController {
 
     @RequestMapping(value = "/download/textbook", method = RequestMethod.GET)
     @ApiOperation(value = "获取机经", httpMethod = "GET")
-    public void textbookDownload(@RequestParam(required = true) String subject, HttpServletRequest request, HttpServletResponse response){
+    public void textbookDownload(@RequestParam(required = true) String subject, @RequestParam(required = false) boolean download, HttpServletRequest request, HttpServletResponse response){
         User user = (User) shiroHelp.getLoginUser();
         if (!userServiceService.hasService(user.getId(), ServiceKey.TEXTBOOK)){
             throw new AuthException("未授权");
@@ -2296,8 +2298,10 @@ public class MyController {
             }
             String fileName = pdfHelp.generatePdfImage(user, resource, false);
             String fileUrl = pdfHelp.getOfflineUrl(fileName);
-            response.setHeader("content-disposition","attachment;filename="+Tools.stringMD5(fileName)+fileName.substring(fileName.lastIndexOf(".")));
-            response.setHeader("content-type", "application/pdf");
+            if (download){
+                response.setHeader("content-disposition","attachment;filename="+Tools.stringMD5(fileName)+fileName.substring(fileName.lastIndexOf(".")));
+                response.setHeader("content-type", "application/pdf");
+            }
             response.setHeader("X-Accel-Redirect", fileUrl);
 //            FileInputStream fileInputStream = new FileInputStream(fileName);
 //            ServletOutputStream outputStream = response.getOutputStream();

+ 20 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/admin/request/CourseDataDto.java

@@ -39,6 +39,10 @@ public class CourseDataDto {
 
     private String methodContent;
 
+    private String resource;
+
+    private String trailResource;
+
     public Integer getId() {
         return id;
     }
@@ -166,4 +170,20 @@ public class CourseDataDto {
     public void setIsSentence(Integer isSentence) {
         this.isSentence = isSentence;
     }
+
+    public String getResource() {
+        return resource;
+    }
+
+    public void setResource(String resource) {
+        this.resource = resource;
+    }
+
+    public String getTrailResource() {
+        return trailResource;
+    }
+
+    public void setTrailResource(String trailResource) {
+        this.trailResource = trailResource;
+    }
 }

+ 10 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/response/CourseDataListDto.java

@@ -32,6 +32,8 @@ public class CourseDataListDto {
 
     private String cover;
 
+    private String resource;
+
     private Integer viewNumber;
 
     private Integer saleNumber;
@@ -199,4 +201,12 @@ public class CourseDataListDto {
     public void setVersion(String version) {
         this.version = version;
     }
+
+    public String getResource() {
+        return resource;
+    }
+
+    public void setResource(String resource) {
+        this.resource = resource;
+    }
 }

+ 4 - 0
server/gateway-api/src/main/java/com/qxgmat/help/PdfHelp.java

@@ -105,6 +105,10 @@ public class PdfHelp {
     }
 
     public String generatePdfImage(User user, String pdfUrl, boolean force) throws IOException, DocumentException {
+        File dir = new File(offlinePath);
+        if (!dir.exists()) {
+            dir.mkdirs();
+        }
         String pdfFile = pdfUrl.replace(webUrl, localPath);
         String dest = pdfFile.replace(".pdf", String.format("_%d.pdf", user.getId())).replace(localPath, offlinePath);
         File file = new File(dest);

+ 1 - 1
server/gateway-api/src/main/java/com/qxgmat/help/VideoHelp.java

@@ -41,7 +41,7 @@ public class VideoHelp {
         String fileName = file.getName();
         File dir = new File(hlsPath);
         if (!dir.exists()) {
-            file.mkdirs();
+            dir.mkdirs();
         }
         File dest = new File( dir.getAbsolutePath() + File.separator+fileName+File.separator+"video.m3u8");
 

+ 3 - 3
server/gateway-api/src/main/profile/dev/application-runtime.yml

@@ -84,11 +84,11 @@ spring:
     timeout: 5000
 
 upload:
-  local_path: ../../upload/
+  local_path: ../upload/
   web_url: /upload/
-  offline_path: ../../offline/
+  offline_path: ../offline/
   offline_url: /offline/
-  hls_path: ../../hls/
+  hls_path: ../hls/
   hls_url: /hls/
   water: /upload
   font: ./NotoSansCJK-Bold.ttc