JSP上传dicom文件,Java解析dicom格式文件

所需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包

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值