Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
Chinlinlee committed Apr 10, 2023
2 parents ccec90e + 6a44542 commit c46d0a5
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 56 deletions.
24 changes: 14 additions & 10 deletions api/FHIR/ImagingStudy/controller/delete_ImagingStudy.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,26 @@
const mongodb = require('models/mongodb');
const mongoFunc = require('models/mongodb/func');
const fs = require('fs');
const path = require("path");

var errorMessage = "";
module.exports = async function (req , res) {
let params = Object.assign({} , req.params);
let keysLen = Object.keys(params).length;
let deleteImageFileFunc = [deleteStudyImage , deleteSeriesImage , deleteInstanceImage];

let deleteFileStatu = await deleteImageFileFunc[keysLen-1](params);
let deleteFileStatus = await deleteImageFileFunc[keysLen-1](params);
let deleteFunc = [deleteStudy , deleteSeries , deleteInstance];
let deleteDataStatu = await deleteFunc[keysLen-1](params);
let deleteDataStatus = await deleteFunc[keysLen-1](params);
//檢查刪除mognodb資料
if (deleteDataStatu) {
let success = {deleteDataStatu : "Delete data successfully"};
if (deleteDataStatus) {
let success = {deleteDataStatus : "Delete data successfully"};
//檢查刪除檔案
if (deleteFileStatu) {
success["deleteFileStatu"] = "delete file success";
if (deleteFileStatus) {
success["deleteFileStatus"] = "delete file success";
return res.status(204).json(success);
}
success["deleteFileStatu"] = "delete file failure , maybe have data but not have file";
success["deleteFileStatus"] = "delete file failure , maybe have data but not have file";
return res.status(204).json(success);
} else {
return res.status(500).end();
Expand All @@ -32,7 +33,8 @@ async function deleteStudyImage (iParams) {
if (imagesPath) {
for (let i = 0 ; i < imagesPath.length ; i++) {
try {
fs.unlinkSync(`${process.env.DICOM_STORE_ROOTPATH}${imagesPath[i]}`);
let absPath = path.join(process.env.DICOM_STORE_ROOTPATH, imagesPath[i]);
fs.unlinkSync(absPath);
} catch (err) {
console.log(err);
return resolve(false);
Expand All @@ -49,7 +51,8 @@ async function deleteSeriesImage (iParams) {
if (imagesPath) {
for (let i = 0 ; i < imagesPath.length ; i++) {
try {
fs.unlinkSync(`${process.env.DICOM_STORE_ROOTPATH}${imagesPath[i]}`);
let absPath = path.join(process.env.DICOM_STORE_ROOTPATH, imagesPath[i]);
fs.unlinkSync(absPath);
} catch (err) {
console.log(err);
return resolve(false);
Expand All @@ -66,7 +69,8 @@ async function deleteInstanceImage (iParams) {
if (imagesPath) {
for (let i = 0 ; i < imagesPath.length ; i++) {
try {
fs.unlinkSync(`${process.env.DICOM_STORE_ROOTPATH}${imagesPath[i]}`);
let absPath = path.join(process.env.DICOM_STORE_ROOTPATH, imagesPath[i]);
fs.unlinkSync(absPath);
} catch (err) {
console.log(err);
return resolve(false);
Expand Down
6 changes: 5 additions & 1 deletion api/dicom-web/controller/wado-rs-instances-bulkdata.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const mongodb = require("../../../models/mongodb");
const _ = require("lodash"); // eslint-disable-line @typescript-eslint/naming-convention
const uuid = require('uuid');
const fs = require('fs');
const path = require("path");

/**
*
Expand Down Expand Up @@ -30,7 +31,10 @@ module.exports = async function (req , res) {
}
]
});
let bulkData = fs.readFileSync(`${process.env.DICOM_STORE_ROOTPATH}${metadata._doc.filename}`);

let metadataAbsFilename = path.join(process.env.DICOM_STORE_ROOTPATH, metadata._doc.filename);

let bulkData = fs.readFileSync(metadataAbsFilename);

const BOUNDARY = `${uuid.v4()}-${uuid.v4()}`;
res.set("Content-Type" , `multipart/related; type=application/octet-stream; boundary=${BOUNDARY}`);
Expand Down
9 changes: 6 additions & 3 deletions api/dicom-web/controller/wado-rs.js
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,8 @@ class WADOZip {
}
for (let i = 0; i < folders.length; i++) {
let folderName = path.basename(folders[i]);
archive.directory(`${process.env.DICOM_STORE_ROOTPATH}${folders[i]}`, folderName);
let folderAbsPath = path.join(process.env.DICOM_STORE_ROOTPATH, folders[i]);
archive.directory(folderAbsPath, folderName);
}
await archive.finalize();
resolve({
Expand Down Expand Up @@ -235,7 +236,8 @@ class WADOZip {
for (let i = 0; i < imagesPath.length; i++) {
let pathSplit = imagesPath[i].split('/');
let storeName = pathSplit[pathSplit.length - 1];
archive.file(`${process.env.DICOM_STORE_ROOTPATH}${imagesPath[i]}`, { name: storeName });
let archiveFilename = path.join(process.env.DICOM_STORE_ROOTPATH, imagesPath[i]);
archive.file(archiveFilename, { name: storeName });
}
await archive.finalize();
return resolve({
Expand Down Expand Up @@ -268,7 +270,8 @@ class WADOZip {
});
});
archive.pipe(this.res);
archive.file(`${process.env.DICOM_STORE_ROOTPATH}${imagesPath[0]}`, { name: path.basename(imagesPath[0]) });
let archiveFilename = path.join(process.env.DICOM_STORE_ROOTPATH, imagesPath[0]);
archive.file(archiveFilename, { name: path.basename(imagesPath[0]) });
await archive.finalize();
resolve({
status: true,
Expand Down
2 changes: 1 addition & 1 deletion api/dicom/controller/wado.js
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ async function handleFrameNumber (param , res , dicomFile) {
return dicomWebHandleError.sendBadRequestMessage(res, "Parameter error : contentType only support image/jpeg with frameNumber");
}
let imageRelativePath = dicomFile.replace(process.env.DICOM_STORE_ROOTPATH,"");
let images = `${process.env.DICOM_STORE_ROOTPATH}${imageRelativePath}`;
let images = path.join(process.env.DICOM_STORE_ROOTPATH, imageRelativePath);
let jpegFile = images.replace(/\.dcm\b/gi , `.${param.frameNumber-1}.jpg`);
let finalJpegFile = "";
if(fs.existsSync(jpegFile)) {
Expand Down
82 changes: 41 additions & 41 deletions models/dcmtk/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ const dcmtkSupportTransferSyntax = [
"1.2.840.10008.1.2.5"
];
function dcm2json(filename) {
function readGenJson (outFilename) {
function readGenJson(outFilename) {
try {
let jsonFile = fs.readFileSync(outFilename , 'utf-8');
let jsonFile = fs.readFileSync(outFilename, 'utf-8');
//清除dcm2json轉出來的json內的NUL (\0)
jsonFile = jsonFile.replace(/,\0/g, '');
jsonFile = jsonFile.replace(/\0/g, '');
Expand All @@ -37,7 +37,7 @@ function dcm2json(filename) {
}
return new Promise((resolve, reject) => {
let baseName = path.basename(filename);
let outFile = filename.replace(baseName , `${new Date().getTime()}$&.json`);
let outFile = filename.replace(baseName, `${new Date().getTime()}$&.json`);
if (process.env.ENV == "windows") {
childProcess.execFile(
"models/dcmtk/dcmtk-3.6.5-win64-dynamic/bin/dcm2json.exe",
Expand Down Expand Up @@ -93,10 +93,10 @@ function dcm2json(filename) {

const dcm2jsonC = require('dicom-to-json');
const dcm2jsonV8 = {
exec : function (dcmfile) {
exec: function (dcmfile) {
return new Promise((resolve, reject) => {
try {
dcm2jsonC.dcm2json(dcmfile , function (data) {
dcm2jsonC.dcm2json(dcmfile, function (data) {
data = data.replace(/,\\u0000/g, '');
data = data.replace(/\\u0000/g, '');
let obj = JSON.parse(data);
Expand All @@ -106,8 +106,8 @@ const dcm2jsonV8 = {
return reject(new Error(e));
}
});
} ,
dcmString : function (json , tag) {
},
dcmString: function (json, tag) {
let data = _.get(json, tag);
//console.log("d" , data);
let value = _.get(data, "Value.0");
Expand All @@ -116,16 +116,16 @@ const dcm2jsonV8 = {
}
};

async function dcm2jpeg (dicomFile) {
return new Promise((resolve , reject)=> {
async function dcm2jpeg(dicomFile) {
return new Promise((resolve, reject) => {
let execCmd = "";
let jpegFile = dicomFile.replace('.dcm' ,'.jpg');
let jpegFile = dicomFile.replace('.dcm', '.jpg');
if (process.env.ENV == "windows") {
execCmd = `models/dcmtk/dcmtk-3.6.5-win64-dynamic/bin/dcmj2pnm.exe --write-jpeg "${dicomFile}" "${jpegFile}"`;
} else if (process.env.ENV == "linux") {
execCmd = `dcmj2pnm --write-jpeg "${dicomFile}" "${jpegFile}"`;
}
let [dcmtk , ...cmd] = execCmd.split(" ");
let [dcmtk, ...cmd] = execCmd.split(" ");
if (process.env.ENV == "windows") dcmtk = path.resolve(dcmtk);
let dcm2jpegSpawn = childProcess.spawn(dcmtk, cmd, {
cwd: process.cwd(),
Expand All @@ -140,34 +140,34 @@ async function dcm2jpeg (dicomFile) {
console.error(stderr);
reject(new Error(stderr));
});
});
});
}

async function dcm2jpegCustomCmd (execCmd) {
return new Promise((resolve , reject)=> {
async function dcm2jpegCustomCmd(execCmd) {
return new Promise((resolve, reject) => {
let [dcmtk, ...cmd] = execCmd.split(" ");
if (process.env.ENV == "windows") dcmtk = path.resolve(dcmtk);
let dcm2jpegSpawn = childProcess.spawn(dcmtk, cmd, {
cwd: process.cwd(),
shell: true
});
dcm2jpegSpawn.stdout.on("data" , function (data) {
dcm2jpegSpawn.stdout.on("data", function (data) {
if (data) console.log(data);
resolve(data);
});
dcm2jpegSpawn.on("close", function() {
dcm2jpegSpawn.on("close", function () {
resolve(true);
});
dcm2jpegSpawn.stderr.on("data", function (stderr) {
stderr = iconv.decode(stderr, 'cp950');
console.error(stderr);
reject(new Error(stderr));
});
});
});
}

async function jpeg2dcmFromDataset (filename , dcmFilename , outputFilename) {
return new Promise((resolve , reject)=> {
async function jpeg2dcmFromDataset(filename, dcmFilename, outputFilename) {
return new Promise((resolve, reject) => {
let execCmd = "";
filename = path.normalize(filename);
outputFilename = path.normalize(outputFilename);
Expand All @@ -176,7 +176,7 @@ async function jpeg2dcmFromDataset (filename , dcmFilename , outputFilename) {
} else if (process.env.ENV == "linux") {
execCmd = `img2dcm ${filename} ${outputFilename} -df ${dcmFilename}`;
}
let [dcmtk , ...cmd] = execCmd.split(" ");
let [dcmtk, ...cmd] = execCmd.split(" ");
childProcess.execFile(
dcmtk,
cmd,
Expand All @@ -197,17 +197,17 @@ async function jpeg2dcmFromDataset (filename , dcmFilename , outputFilename) {
});
}

async function xml2dcm (filename , outputFilename) {
return new Promise((resolve , reject)=> {
let execCmd= "";
async function xml2dcm(filename, outputFilename) {
return new Promise((resolve, reject) => {
let execCmd = "";
filename = path.normalize(filename);
outputFilename = path.normalize(outputFilename);
if (process.env.ENV == "windows") {
execCmd = `models/dcmtk/dcmtk-3.6.5-win64-dynamic/bin/xml2dcm.exe ${filename} ${outputFilename}`;
} else if (process.env.ENV == "linux") {
execCmd = `xml2dcm ${filename} ${outputFilename}`;
}
let [dcmtk , ...cmd] = execCmd.split(" ");
let [dcmtk, ...cmd] = execCmd.split(" ");
childProcess.execFile(
dcmtk,
cmd,
Expand Down Expand Up @@ -235,15 +235,15 @@ async function xml2dcm (filename , outputFilename) {
* @param {Array<String>}otherOptions
*/

async function getFrameImage (imagesPath , frameNumber ,otherOptions=[]) {
async function getFrameImage(imagesPath, frameNumber, otherOptions = []) {
let execCmd = "";
let images = `${process.env.DICOM_STORE_ROOTPATH}${imagesPath}`;
let jpegFile = images.replace(/\.dcm\b/gi , `.${frameNumber-1}.jpg`);
let images = path.join(process.env.DICOM_STORE_ROOTPATH, imagesPath);
let jpegFile = images.replace(/\.dcm\b/gi, `.${frameNumber - 1}.jpg`);
if (fs.existsSync(jpegFile)) {
let rs = fs.createReadStream(jpegFile);
return {
status : true ,
imageStream : rs,
status: true,
imageStream: rs,
imagePath: jpegFile
};
}
Expand All @@ -257,29 +257,29 @@ async function getFrameImage (imagesPath , frameNumber ,otherOptions=[]) {
if (dcm2jpegStatus) {
let rs = fs.createReadStream(jpegFile);
return {
status : true ,
imageStream : rs,
status: true,
imageStream: rs,
imagePath: jpegFile
};
}
} catch(e) {
} catch (e) {
console.error(e);
return {
status : false ,
imageStream : e,
status: false,
imageStream: e,
imagePath: jpegFile
};
}

}

module.exports = {
dcm2json: dcm2json ,
dcm2jsonV8 : dcm2jsonV8 ,
dcm2jpeg : dcm2jpeg ,
dcm2jpegCustomCmd : dcm2jpegCustomCmd ,
jpeg2dcmFromDataset : jpeg2dcmFromDataset ,
xml2dcm : xml2dcm ,
getFrameImage : getFrameImage,
dcm2json: dcm2json,
dcm2jsonV8: dcm2jsonV8,
dcm2jpeg: dcm2jpeg,
dcm2jpegCustomCmd: dcm2jpegCustomCmd,
jpeg2dcmFromDataset: jpeg2dcmFromDataset,
xml2dcm: xml2dcm,
getFrameImage: getFrameImage,
dcmtkSupportTransferSyntax: dcmtkSupportTransferSyntax
};

0 comments on commit c46d0a5

Please sign in to comment.