This commit is contained in:
王思川 2022-04-27 17:15:36 +08:00
parent ad6183d65e
commit 5477d33dd4
10 changed files with 86 additions and 84 deletions

View File

@ -0,0 +1,36 @@
from flask import Response
from DBHelper.MongoHelper import MongoHelper
from ObjectsCommon.Others.FECRFile import FECRFile
class TFSEFileImpl(FECRFile):
"""文件类实现"""
db = MongoHelper("tfse_v0.21")
def dict_to_return(self, **kwargs):
return self.file_body
def get_image(self):
""""""
def get_pdf(self):
file_type_map = {
"cc_report": "综信报告",
"cc_certificate": "综信证书",
"esg_report": "ESG报告",
"esg_certificate": "ESG证书"
}
try:
file_stream = self.db.find_file(
"文件",
file_type_map[self.file_type],
self.file_id
)
self.file_body = Response(file_stream, content_type='application/pdf')
except Exception:
self.file_body = None

View File

@ -0,0 +1,24 @@
from flask import Response
from Utils.ObjUtil import SpecObject
from Utils.ValidateUtil import ValidateAttr
class FECRFile(SpecObject):
"""文件类"""
file_id = ValidateAttr(field='file_id', type=str)
file_type = ValidateAttr(field='file_type', type=str)
file_body = ValidateAttr(field='file_body', type=Response, default=None)
fields_map = {
"file_id": "文件ID",
"file_type": "文件类型",
"file_body": "文件体"
}
def get_image(self):
"""获取图片"""
def get_pdf(self):
"""获取PDF"""

View File

@ -0,0 +1,22 @@
from flask import Blueprint, request, Response
from Implements.Others.TFSEFileImpl import TFSEFileImpl
from Utils.AuthUtil import verify_token, verify_report_view_auth
file_route = Blueprint('file', __name__)
@file_route.route('/pdf', methods=['GET'])
@verify_token
@verify_report_view_auth
def get_file(**kwargs):
"""获取pdf文件"""
impl = TFSEFileImpl()
impl.file_type = request.args.get('file_type')
impl.file_id = request.args.get('file_id')
impl.get_pdf()
if impl.file_body:
return impl.dict_to_return()
else:
return {"info": "文件不存在"}, 200

View File

@ -92,7 +92,7 @@ def verify_report_view_auth(func):
)
if not records:
return {"info": "没有找到文件"}, 200
return {"info": "文件不存在"}, 200
file_id_pool = list()
for record in records:
@ -102,7 +102,7 @@ def verify_report_view_auth(func):
file_id_pool = list(filter(None, file_id_pool))
if file_id not in file_id_pool:
return {"info": "文件不存在或无访问权限"}, 200
return {"info": "无访问权限"}, 200
return func(*args, **kwargs)
return internal

3
app.py
View File

@ -4,9 +4,10 @@ from flask_cors import *
from Routes.Company.Index import company_route
from Routes.Other.EmailNoticeRoute import email_route
from Routes.Other.TFSEFileRoute import file_route
from Routes.User.TFSECompanyUserRoute import company_user_route
from file.file_routes import file_route
from Rating.Credit.CreditRoutes import credit_route
from Rating.Esg.EsgRoutes import esg_route
from TestForAdmin.route import test_admin_route

View File

View File

@ -1,30 +0,0 @@
import gridfs
import pymongo
from bson import ObjectId
from gridfs import GridFS
DB_HOST = "116.63.130.34"
DB_PASS = "UTlC9cCoglD1cI1*"
DB_USER = "root"
DB_PORT = "27021"
client = pymongo.MongoClient('mongodb://{}:{}@{}:{}'.format(DB_USER, DB_PASS, DB_HOST, DB_PORT))
def FIND_FILE(bucket, file_id):
"""
读取一个文件
Parameters:
bucket: 文件存储桶
file_id: 文件ID
Returns:
data 成功: 文件二进制; 失败: None
"""
# 实例化一个文件存储器
gfs = GridFS(client['文件'], collection=bucket)
try:
# 二进制读取文件
data = gfs.get(ObjectId(file_id)).read()
# 返回文件二进制流
return data
except gridfs.errors.NoFile:
return None

View File

@ -1,16 +0,0 @@
from file.file_db import FIND_FILE
def get_pdf_file_impl(file_type, fid):
"""
根据文件类型文件ID,获取pdf文件
"""
# ftm: file_type_map
ftm = {
"cc_report": "综信报告",
"cc_certificate": "综信证书",
"esg_report": "ESG报告",
"esg_certificate": "ESG证书"
}
filestream = FIND_FILE(ftm[file_type], fid)
return filestream

View File

@ -1,11 +0,0 @@
from file.file_impl import get_pdf_file_impl
class TfseFile:
def __init__(self):
self.file_type = None
self.file_id = None
def get_pdf_file(self):
return get_pdf_file_impl(self.file_type, self.file_id)

View File

@ -1,24 +0,0 @@
from flask import Blueprint, request, Response
from Utils.AuthUtil import verify_token, verify_report_view_auth
from file.file_obj import TfseFile
file_route = Blueprint('file', __name__)
@file_route.route('/pdf', methods=['GET'])
@verify_token
@verify_report_view_auth
def get_file(**kwargs):
"""
获取pdf文件
"""
tfse_file = TfseFile()
tfse_file.file_type = request.args.get('file_type')
tfse_file.file_id = request.args.get('file_id')
pdf = tfse_file.get_pdf_file()
if pdf is not None:
response = Response(pdf, content_type='application/pdf')
return response
else:
return {"info": "文件不存在"}, 200