1. 程式人生 > 其它 >JSP上傳dicom檔案,Java解析dicom格式檔案

JSP上傳dicom檔案,Java解析dicom格式檔案

技術標籤:java解析dicom檔案jspjavadicom

所需jar包

commons-fileupload-1.4.jar
dcm4che-core-5.22.6.jar
commons-io-2.8.0.jar
commons-logging-1.2.jar
log4j-1.2.17.jar
slf4j-api-1.7.3.jar
slf4j-simple-1.7.3.jar

jsp頁面

 <form action="UploadServlet" method="post" enctype="multipart/form-data">
		<label>上傳檔案:</label><input type="file" name="spicture">
		<input type="submit" value="上傳" style="background:url(../images/btnbg.png) no-repeat;width:70px;color:white;height:30px">
	</form>

後端程式碼

我研究了半天,後端獲取前端穿過來的檔案用的是
InputStream fileSourceStream = request.getInputStream();
而我們需要用DicomInputStream來解析dicom檔案。這兩個輸入流不能相互轉換。所以我只能先獲取到輸入流,然後把上傳的檔案儲存到固定的地址。再重新用DicomInputStream dcmDicomInputStream = new DicomInputStream(file);這句話來獲取到輸入流。
整體程式碼如下:

package servlet.Patient;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.dcm4che3.data.Attributes;
import org.dcm4che3.data.Tag;
import org.dcm4che3.io.DicomInputStream;
import allbean.PatientBean;  // 我的實體類

public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private boolean isMultipart;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 預防亂碼
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		isMultipart = ServletFileUpload.isMultipartContent(request);
        String result = "";
        response.setContentType("text/html;charset=utf-8");
        if (!isMultipart) {
            result = "未獲取到檔案";
            response.getWriter().println(result);
            return;
        }
        //先把檔案儲存到指定碟符
        DiskFileItemFactory factory = new DiskFileItemFactory();
		String path = getServletContext().getRealPath("/");
		factory.setRepository(new File(path));
		// 建立一個新的檔案上傳處理程式
	    ServletFileUpload upload = new ServletFileUpload(factory);
	    try {
			List fileItems = upload.parseRequest(request);
			Iterator i = fileItems.iterator();
            while (i.hasNext()) {
                FileItem fi = (FileItem) i.next();
                if (!fi.isFormField()) {
                    // 獲取上傳檔案的引數
                    String fieldName = fi.getFieldName();
                    String fileName = fi.getName();
                    String contentType = fi.getContentType();
                    boolean isInMemory = fi.isInMemory();
                    long sizeInBytes = fi.getSize();
                    path = path+System.currentTimeMillis() / 1000;
                    // 寫入檔案
                    File file = new File(path+".dcm");
                    fi.write(file);
                }
            }
            result = "上傳成功";
		} catch (FileUploadException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	  //  InputStream fileSourceStream = request.getInputStream();
	  // 用DicomInputStream來獲取檔案
		DicomInputStream dcmDicomInputStream=null;
		File file = new File(path+".dcm");
		try {	 
			dcmDicomInputStream = new DicomInputStream(file);
			@SuppressWarnings("static-access")
			Attributes dataset = dcmDicomInputStream.readDataset(-1, -1);
			//輸出所有屬性資訊
		    System.out.println("所有資訊: " + dataset);
		  //獲取行
		    int row = dataset.getInt(Tag.Rows, 1);
		    //獲取列
		    int columns = dataset.getInt(Tag.Columns, 1);
		    System.out.println("" + "row=" + row + ",columns=" + row + ",row*columns = " + row * columns);
		    String patientName = dataset.getString(Tag.PatientName, "");
		    String patient_age = dataset.getString(Tag.PatientAge, "");
		    String patient_sex = dataset.getString(Tag.PatientSex, "");
		    String patientBirthDate = dataset.getString(Tag.PatientBirthDate, "");	    
		    //機構
		    String institution = dataset.getString(Tag.InstitutionName, ""); 
		    //站點
		    String station = dataset.getString(Tag.StationName, "");		    
		    String description = dataset.getString(Tag.StudyDescription, "");		    
		    //描述--具體
		    String SeriesDescription = dataset.getString(Tag.SeriesDescription, "");		    
		    //描述時間
		    String studyData1 = dataset.getString(Tag.StudyDate, "");
		    Date format1 = null;
            format1 = new SimpleDateFormat("yyyyMMdd").parse(studyData1);
            String studyData = new SimpleDateFormat("yyyy-MM-dd").format(format1);
		    byte[] bytename = dataset.getBytes(Tag.PatientName);
		    System.out.println("姓名: " + new String(bytename,"gb18030"));
//			Attributes dataset = dcmDicomInputStream.readDataset(-1, Tag.PixelData);
			request.setAttribute("patient_name", patientName);
			request.setAttribute("patient_age", patient_age);
			request.setAttribute("patient_sex", patient_sex);
			request.setAttribute("patient_birth", patientBirthDate);
			request.setAttribute("institution", institution);
			request.setAttribute("station", station);
			request.setAttribute("description", description);
			request.setAttribute("SeriesDescription", SeriesDescription);
			request.setAttribute("study_date", studyData);
		
			RequestDispatcher dispacher = request.getRequestDispatcher("addPatient.jsp");
			dispacher.forward(request, response);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
}

我這個程式實現的是前端JSP上傳dicom檔案,後端獲取到上傳檔案後解析獲得病人的個人資訊。再把病人資訊回顯到前端jsp頁面上。
前面所需的jar包我打包放在了csdn上,有需要可以去下載。網址:
https://download.csdn.net/download/weixin_44439539/14020246
在這裡插入圖片描述
或者直接點選下方連結跳轉
上傳檔案和解析dicom檔案所需的jar包