Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/servlet/UploadServlet.java =================================================================== diff -u -r16685 -r20428 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/servlet/UploadServlet.java (.../UploadServlet.java) (revision 16685) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/servlet/UploadServlet.java (.../UploadServlet.java) (revision 20428) @@ -6,7 +6,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -22,24 +21,27 @@ import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang3.StringUtils; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.entity.basedatamanager.imagefilemanager.ImageFile; -import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecordPic; import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service.SterilizationRecordManager; import com.forgon.disinfectsystem.tousse.imagefilemanager.service.ImageFileManager; +import com.forgon.exception.SystemException; +import com.forgon.exception.service.ExceptionHandler; import com.forgon.tools.Path; import com.forgon.tools.SpringBeanManger; -import com.forgon.tools.string.StringTools; +import com.forgon.tools.StrutsResponseUtils; public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private SterilizationRecordManager sterilizationRecordManager; private SupplyRoomConfigManager supplyRoomConfigManager; private ImageFileManager imageFileManager; - + private ExceptionHandler exceptionHandler; + @Override public void init() throws ServletException { sterilizationRecordManager = (SterilizationRecordManager) SpringBeanManger @@ -48,6 +50,8 @@ .getBean("supplyRoomConfigManager"); imageFileManager = (ImageFileManager) SpringBeanManger .getBean("imageFileManager"); + exceptionHandler = (ExceptionHandler) SpringBeanManger + .getBean("exceptionHandler"); } public static final String PHOTO_TYPE_STERILE_RECORD = "sterileRecord"; @@ -60,7 +64,6 @@ try { request.setCharacterEncoding("UTF-8"); // 设置处理请求参数的编码格式 response.setContentType("text/html;charset=UTF-8"); // 设置Content-Type字段值 - PrintWriter out = response.getWriter(); String sterileRecordId = request.getParameter("sterileRecordId"); String photoType = request.getParameter("photoType"); //灭菌记录或者生物监测 // 下面的代码开始使用Commons-UploadFile组件处理上传的文件数据 @@ -70,17 +73,21 @@ List items = upload.parseRequest(request); // 从web.xml文件中的参数中得到上传文件的路径 String uploadPath = "C:\\SterileimageFiles\\"; - String method = supplyRoomConfigManager.getSystemParamsObj() - .getSaveImageMethod(); - if (SupplyRoomConfig.SAVE_IN_LOCAL_FILE.equals(method)) { + boolean saveImgLocal = supplyRoomConfigManager.getSystemParamsObj() + .saveImageLocal(); + if (saveImgLocal) { uploadPath = supplyRoomConfigManager.getSystemParamsObj() .getSaveImagePath(); } Path.createDirectoryIfNeeded(uploadPath); + File file = new File(uploadPath, "sterileImage" + File.separator); if (!file.exists()) { file.mkdir(); } + if(!file.exists() && saveImgLocal){ + throw new SystemException("图片保存路径设置错误,请到科室供应室配置中修改"); + } String filename = ""; // 上传文件保存到服务器的文件名 InputStream is = null; // 当前上传文件的InputStream对象 // 循环处理上传文件 @@ -138,9 +145,11 @@ imageFileManager.saveImageFile(uploadImageList, ImageFile.IMAGE_TYPE_STERILIZATION, sterileRecordId); }else{ //灭菌记录照片 - saveSterileRecordPic(method, filename, picData, id); + saveSterileRecordPic(filename, picData, id); } + StrutsResponseUtils.output(true, "上传成功",response); } catch (Exception e) { + exceptionHandler.handleException(response, e); } } /** @@ -152,42 +161,41 @@ * @throws FileNotFoundException * @throws IOException */ - private void saveSterileRecordPic(String method, String filename, - byte[] picData, Long id) throws FileNotFoundException, IOException { - if (SupplyRoomConfig.SAVE_IN_LOCAL_FILE.equals(method)) {// 保存到文件系统 - if (!filename.equals("")) { - // 用FileOutputStream打开服务端的上传文件 - if(ArrayUtils.isNotEmpty(picData)){ - FileOutputStream fos = new FileOutputStream(filename); - fos.write(picData, 0, picData.length); // 向服务端文件写入字节流 - fos.close(); // 关闭FileOutputStream对象 - - // 生成缩略图 - String thumbnailImageName = UUID.randomUUID().toString() + ".jpg"; - imageFileManager.SaveToThumbnail(picData, filename, thumbnailImageName); - // 保存记录到数据库 - SterilizationRecordPic pic = new SterilizationRecordPic(); - pic.setFilePath(filename); - pic.setThumbnailFileName(thumbnailImageName); - Collection picList = new ArrayList(); - picList.add(pic); - - if (id != null){ - sterilizationRecordManager.saveRecordPicture(id, picList, - ""); - } - } + private void saveSterileRecordPic(String filename,byte[] picData, Long id) throws FileNotFoundException, IOException { + if(id == null){ + throw new SystemException("灭菌记录的id不能为空"); + } + if(ArrayUtils.isEmpty(picData)){ + throw new SystemException("未获取到图片数据"); + } + if (supplyRoomConfigManager.getSystemParamsObj().saveImageLocal()) {// 保存到文件系统 + if(StringUtils.isBlank(filename)){ + throw new SystemException("文件名不能为空"); } - }else if(SupplyRoomConfig.SAVE_IN_DATABASE.equals(method)){// 保存到数据库 + FileOutputStream fos = new FileOutputStream(filename); + fos.write(picData, 0, picData.length); // 向服务端文件写入字节流 + fos.close(); // 关闭FileOutputStream对象 - if (id != null && ArrayUtils.isNotEmpty(picData)) { - SterilizationRecordPic pic = new SterilizationRecordPic(); - pic.setPicture(picData); - Collection picList = new ArrayList(); - picList.add(pic); - sterilizationRecordManager.saveRecordPicture(id, picList, - ""); - } + // 生成缩略图 + String thumbnailImageName = UUID.randomUUID().toString() + ".jpg"; + imageFileManager.SaveToThumbnail(picData, filename, thumbnailImageName); + // 保存记录到数据库 + SterilizationRecordPic pic = new SterilizationRecordPic(); + pic.setFilePath(filename); + pic.setThumbnailFileName(thumbnailImageName); + Collection picList = new ArrayList(); + picList.add(pic); + + sterilizationRecordManager.saveRecordPicture(id, picList, + ""); + }else if(supplyRoomConfigManager.getSystemParamsObj().saveImageDataBase()){// 保存到数据库 + SterilizationRecordPic pic = new SterilizationRecordPic(); + pic.setPicture(picData); + Collection picList = new ArrayList(); + picList.add(pic); + sterilizationRecordManager.saveRecordPicture(id, picList,""); + }else{ + throw new SystemException("图片保存方式设置错误,请到科室供应室设置中进行配置"); } } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/supplyroomconfig/SupplyRoomConfig.java =================================================================== diff -u -r19488 -r20428 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/supplyroomconfig/SupplyRoomConfig.java (.../SupplyRoomConfig.java) (revision 19488) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/supplyroomconfig/SupplyRoomConfig.java (.../SupplyRoomConfig.java) (revision 20428) @@ -116,9 +116,9 @@ public static final String SAVE_IN_LOCAL_FILE = "保存到本地磁盘"; public static final String SAVE_IN_DATABASE = "保存到数据库"; - public String saveImageMethod = SAVE_IN_LOCAL_FILE;// 上传图片方式,默认为上传到文件系统,减少数据库的大小 + private String saveImageMethod = SAVE_IN_LOCAL_FILE;// 上传图片方式,默认为上传到文件系统,减少数据库的大小 - public String saveImagePath;// 默认保存到本地磁盘 C:\\sterile\\uploadImage + private String saveImagePath;// 默认保存到本地磁盘 C:\\sterile\\uploadImage private String goodsIds;// 各类型输液器报表 @@ -427,6 +427,22 @@ public void setSaveImageMethod(String saveImageMethod) { this.saveImageMethod = saveImageMethod; } + /** + * 图片是否保存到本地 + * @return + */ + @Transient + public boolean saveImageLocal(){ + return SAVE_IN_LOCAL_FILE.equals(saveImageMethod); + } + /** + * 图片是否保存到数据库 + * @return + */ + @Transient + public boolean saveImageDataBase(){ + return SAVE_IN_DATABASE.equals(saveImageMethod); + } public String getSaveImagePath() { return saveImagePath;