!1288 优化:加强文件MD5校验

pull/1288/MERGE
ZoeLeeFZ 4 years ago committed by ChenX
parent 3f80af6183
commit 4964052565

@ -31,7 +31,7 @@ export class Command_Insert implements Command
if (state.Status !== ModalState.Ok || !finfo) if (state.Status !== ModalState.Ok || !finfo)
return; return;
let fileData = await fileServer.GetFileInfo(finfo.file_id, finfo.code); let fileData = await fileServer.GetFileInfo(finfo.file_id);
if (fileData) if (fileData)
{ {

@ -24,10 +24,9 @@ export class ReOpen implements Command
if (fileServer.m_CurFileId) if (fileServer.m_CurFileId)
{ {
let id = fileServer.m_CurFileId; let id = fileServer.m_CurFileId;
let md5 = fileServer.CurrentFileMd5;
app.CreateDocument(); app.CreateDocument();
fileServer.Clear(); fileServer.Clear();
fileServer.OpenFile(id, md5); fileServer.OpenFile(id);
} }
} }
} }

@ -69,6 +69,7 @@ export const FileUrls = {
update: CURRENT_HOST + "/CAD-fileUpdate", update: CURRENT_HOST + "/CAD-fileUpdate",
move: CURRENT_HOST + "/CAD-fileMove", move: CURRENT_HOST + "/CAD-fileMove",
copy: CURRENT_HOST + "/CAD-fileCopy", copy: CURRENT_HOST + "/CAD-fileCopy",
preDetail: CURRENT_HOST + "/CAD-filePreDetail",
}; };
export const TemplateUrls = { export const TemplateUrls = {
create: CURRENT_HOST + "/CAD-moduleCreate", create: CURRENT_HOST + "/CAD-moduleCreate",

@ -78,8 +78,16 @@ export class FileServer extends Singleton
app.CreateDocument(); app.CreateDocument();
return true; return true;
} }
async OpenFile(fid: string, md5: string = "") async GetFileMD5(fid: string): Promise<string | undefined>
{ {
let codeRes = await PostJson(FileUrls.preDetail, { file_id: fid });
if (codeRes.err_code === RequestStatus.Ok)
return codeRes.files.code;
return undefined;
}
async OpenFile(fid: string)
{
let md5 = await this.GetFileMD5(fid);
if (this.m_CurFileId !== fid || this.CurrentFileMd5 !== md5) if (this.m_CurFileId !== fid || this.CurrentFileMd5 !== md5)
{ {
if (!app.Saved) if (!app.Saved)
@ -120,13 +128,18 @@ export class FileServer extends Singleton
} }
return []; return [];
} }
async GetFileInfo(fid: string, md5: string): Promise<{ name: string; file?: string; code: string; }> async GetFileInfo(fid: string, code?: string): Promise<{ name: string; file?: string; code: string; }>
{ {
if (!code)
code = await this.GetFileMD5(fid);
if (!code) return null;
let store = await IndexedDbStore.CADStore(); let store = await IndexedDbStore.CADStore();
let fileCache = await store.Get(StoreName.Dwg, GetIndexDBID(fid)); let fileCache = await store.Get(StoreName.Dwg, GetIndexDBID(fid));
if (fileCache?.code === md5 && fileCache?.file) if (fileCache?.code === code && fileCache?.file)
{ {
return fileCache; return fileCache;
} }

@ -21,7 +21,7 @@ export class ContentComponent extends React.Component<{ store?: TopPanelStore; }
this.props.store.openMain = false; this.props.store.openMain = false;
this.props.store.editoring = true; this.props.store.editoring = true;
}; };
handleOpenFile = async (fid: string, md5: string) => handleOpenFile = async (fid: string) =>
{ {
this.props.store.openMain = false; this.props.store.openMain = false;
this.props.store.editoring = true; this.props.store.editoring = true;
@ -30,7 +30,7 @@ export class ContentComponent extends React.Component<{ store?: TopPanelStore; }
timeout: 0, timeout: 0,
intent: Intent.PRIMARY intent: Intent.PRIMARY
}, 'openfile'); }, 'openfile');
await (FileServer.GetInstance() as FileServer).OpenFile(fid, md5); await (FileServer.GetInstance() as FileServer).OpenFile(fid);
AppToaster.show({ AppToaster.show({
message: "加载完成", message: "加载完成",
timeout: 1000, timeout: 1000,
@ -117,7 +117,7 @@ export class ContentComponent extends React.Component<{ store?: TopPanelStore; }
<div className="grip-list"> <div className="grip-list">
{ {
store.m_FileList.slice(0, 4).map(file => <div store.m_FileList.slice(0, 4).map(file => <div
onClick={() => this.handleOpenFile(file.file_id, file.code)} onClick={() => this.handleOpenFile(file.file_id)}
> >
<div> <div>
<img src={`${CURRENT_HOST}/${file.logo}`} alt="" /> <img src={`${CURRENT_HOST}/${file.logo}`} alt="" />

@ -29,7 +29,7 @@ export interface IFileListProps
@observer @observer
export class FileList extends React.Component<IFileListProps, {}> { export class FileList extends React.Component<IFileListProps, {}> {
@observable isShowSize = false; @observable isShowSize = false;
handleOpenFile = async (fid: string, md5: string) => handleOpenFile = async (fid: string) =>
{ {
this.props.store.m_FileManageOpen = false; this.props.store.m_FileManageOpen = false;
AppToaster.show({ AppToaster.show({
@ -37,7 +37,7 @@ export class FileList extends React.Component<IFileListProps, {}> {
timeout: 0 timeout: 0
}, 'openfile'); }, 'openfile');
let server = FileServer.GetInstance() as FileServer; let server = FileServer.GetInstance() as FileServer;
let status = await server.OpenFile(fid, md5); let status = await server.OpenFile(fid);
AppToaster.show({ AppToaster.show({
message: status ? "加载完成" : "图纸打开失败", message: status ? "加载完成" : "图纸打开失败",
timeout: 3000, timeout: 3000,
@ -158,7 +158,7 @@ export class FileList extends React.Component<IFileListProps, {}> {
small small
text="打开" text="打开"
intent={Intent.SUCCESS} intent={Intent.SUCCESS}
onClick={() => this.handleOpenFile(file.file_id, file.code)} onClick={() => this.handleOpenFile(file.file_id)}
/> />
} }
renderOtherElement={(data) => renderOtherElement={(data) =>

Loading…
Cancel
Save