private void analyzeRequest(HttpServletRequest request) { // TODO Auto-generated method stub isMultipart = ServletFileUpload.isMultipartContent(request); userName = request.getParameter(USER_NAME); lat = Double.parseDouble(request.getParameter(LAT)); lng = Double.parseDouble(request.getParameter(LNG)); cautionType = Short.parseShort(request.getParameter(CAUTION_TYPE)); comment = request.getParameter(COMMENT); }
public HttpParams(HttpServletRequest request) throws UnsupportedEncodingException { // 检测是否是一个文件上传请求 this.request = request; isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); RequestContext requestContext = new ServletRequestContext(request); try { List<FileItem> items = upload.parseRequest(requestContext); Iterator<FileItem> itr = items.iterator(); avs = new HashMap<String, String>(); fileitemMap = new HashMap<String, FileItem>(); while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); String fieldName = item.getFieldName(); if (item.isFormField()) { avs.put(fieldName, item.getString("UTF-8")); } else { fileitemMap.put(fieldName, item); } } } catch (Exception ex) { ex.printStackTrace(); } } else { // 非文件上传请求 (参数加密) request.setCharacterEncoding("utf-8"); String s = request.getParameter("__"); // s = URLDecoder.decode(s,"UTF-8"); // logger.info("http reqeust params: "+s); if (s != null && !s.equals("")) { try { encoded = true; // String str = DataUtil.decodeECBString(password, DataUtil.HexString2Bytes(s)); String str = DataUtil.decodeECBString(password, DataUtil.decodeBase64(s)); String[] pairs = str.split("&"); params = new HashMap<String, String>(); for (int i = 0; i < pairs.length; i++) { // String[] tokens = pairs[i].split("="); int index = pairs[i].indexOf("="); String key = pairs[i].substring(0, index); String value = pairs[i].substring(index + 1, pairs[i].length()); params.put(key, URLDecoder.decode(value, "UTF-8")); } } catch (Exception ex) { ex.printStackTrace(); } } } }
@Override public void execute(HttpServletRequest request) { boolean isMultipart = ServletFileUpload.isMultipartContent(request); Logger.debug("UploadImageCmd - request: " + request); if (!isMultipart) { Logger.debug("UploadImageCmd - nao multipart"); } else { FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = null; try { items = upload.parseRequest(request); Logger.debug("itens: " + items); } catch (FileUploadException e) { Logger.error("Upload de imagem falhou", e); } Iterator<FileItem> itr = items.iterator(); while (itr.hasNext()) { FileItem item = itr.next(); if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString(); Logger.debug("Campo de formulario: " + name + " = " + value); } else { try { String mimetype = item.getContentType(); Logger.debug("Mimetype: " + mimetype); if (StringUtils.isEmpty(mimetype) || !mimetype.startsWith("image/")) { Logger.warning("Mimetype invalido."); continue; } // Vamos reimensionar a imagem caso necessario (para que ela nao fique muito grande) BufferedImage img = resizeImg(item.getInputStream()); String itemName = item.getName(); Random generator = new Random(); int r = generator.nextInt(Integer.MAX_VALUE); String reg = "[.*]"; String replacingtext = ""; Pattern pattern = Pattern.compile(reg); Matcher matcher = pattern.matcher(itemName); StringBuffer buffer = new StringBuffer(); while (matcher.find()) { matcher.appendReplacement(buffer, replacingtext); } int indexOf = itemName.indexOf("."); String extension = itemName.substring(indexOf + 1); Logger.debug("extensao: " + extension); String finalImage = buffer.toString() + "_" + r + "." + extension; Logger.debug("Imagem Final === " + finalImage); String path = request.getServletContext().getRealPath("/pictures"); File savedFile = new File(path + "/" + finalImage); ImageIO.write(img, extension, savedFile); mImagePath = savedFile.getAbsolutePath(); request.setAttribute("img", "pictures/" + finalImage); Logger.debug("Imagem salva em: " + mImagePath); } catch (Exception e) { Logger.error("Erro no upload da imagem", e); } } } } }
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { // Verify the post has the correct encoding if (!ServletFileUpload.isMultipartContent(request)) { sendErrMsg(response, "Invalid request contents format for this service."); return; } // Get the contents from the post request String username = null; try { username = DashboardUtils.cleanUsername(request.getUserPrincipal().getName().trim()); } catch (Exception ex) {; // leave username null for error message later } // Get the contents from the post request String expocodes = null; String uploadTimestamp = null; String omeIndicator = null; FileItem metadataItem = null; try { Map<String, List<FileItem>> paramMap = metadataUpload.parseParameterMap(request); try { List<FileItem> itemList; itemList = paramMap.get("expocodes"); if ((itemList != null) && (itemList.size() == 1)) { expocodes = itemList.get(0).getString(); } itemList = paramMap.get("timestamp"); if ((itemList != null) && (itemList.size() == 1)) { uploadTimestamp = itemList.get(0).getString(); } itemList = paramMap.get("ometoken"); if ((itemList != null) && (itemList.size() == 1)) { omeIndicator = itemList.get(0).getString(); } itemList = paramMap.get("metadataupload"); if ((itemList != null) && (itemList.size() == 1)) { metadataItem = itemList.get(0); } } finally { // Delete everything except for the uploaded metadata file for (List<FileItem> itemList : paramMap.values()) { for (FileItem item : itemList) { if (!item.equals(metadataItem)) { item.delete(); } } } } } catch (Exception ex) { if (metadataItem != null) metadataItem.delete(); sendErrMsg(response, "Error processing the request\n" + ex.getMessage()); return; } // Verify page contents seem okay DashboardConfigStore configStore = DashboardConfigStore.get(true); if ((username == null) || (expocodes == null) || (uploadTimestamp == null) || (omeIndicator == null) || (metadataItem == null) || (!(omeIndicator.equals("false") || omeIndicator.equals("true"))) || !configStore.validateUser(username)) { if (metadataItem != null) metadataItem.delete(); sendErrMsg(response, "Invalid request contents for this service."); return; } // Extract the cruise expocodes from the expocodes string TreeSet<String> cruiseExpocodes = new TreeSet<String>(); try { cruiseExpocodes.addAll(DashboardUtils.decodeStringArrayList(expocodes)); if (cruiseExpocodes.size() < 1) throw new IllegalArgumentException(); } catch (IllegalArgumentException ex) { metadataItem.delete(); sendErrMsg(response, "Invalid request contents for this service."); return; } boolean isOme = omeIndicator.equals("true"); String version = configStore.getUploadVersion(); MetadataFileHandler metadataHandler = configStore.getMetadataFileHandler(); CruiseFileHandler cruiseHandler = configStore.getCruiseFileHandler(); DatabaseRequestHandler dbHandler = configStore.getDatabaseRequestHandler(); DsgNcFileHandler dsgFileHandler = configStore.getDsgNcFileHandler(); OmePdfGenerator omePdfGenerator = configStore.getOmePdfGenerator(); String uploadFilename; if (isOme) { // Save under the PI_OME_FILENAME at this time. // When CDIAC OME incorporated, change to OME_FILENAME uploadFilename = DashboardUtils.PI_OME_FILENAME; } else { uploadFilename = DashboardUtils.baseName(metadataItem.getName()); if (uploadFilename.equals(DashboardUtils.OME_FILENAME) || uploadFilename.equals(DashboardUtils.OME_PDF_FILENAME) || uploadFilename.equals(DashboardUtils.PI_OME_FILENAME) || uploadFilename.equals(DashboardUtils.PI_OME_PDF_FILENAME)) { metadataItem.delete(); sendErrMsg( response, "Name of the uploaded file cannot be " + DashboardUtils.OME_FILENAME + " nor " + DashboardUtils.OME_PDF_FILENAME + " nor " + DashboardUtils.PI_OME_FILENAME + " nor " + DashboardUtils.PI_OME_PDF_FILENAME + "\nPlease rename the file and try again."); } } DashboardMetadata metadata = null; for (String expo : cruiseExpocodes) { try { // Save the metadata document for this cruise if (metadata == null) { metadata = metadataHandler.saveMetadataFileItem( expo, username, uploadTimestamp, uploadFilename, version, metadataItem); } else { metadata = metadataHandler.copyMetadataFile(expo, metadata, true); } // Update the metadata documents associated with this cruise DashboardCruise cruise; if (isOme) { // Make sure the contents are valid OME XML DashboardOmeMetadata omedata; try { omedata = new DashboardOmeMetadata(metadata, metadataHandler); } catch (IllegalArgumentException ex) { // Problems with the file - delete it metadataHandler.removeMetadata(username, expo, metadata.getFilename()); throw new IllegalArgumentException("Invalid OME metadata file: " + ex.getMessage()); } cruise = cruiseHandler.addAddlDocToCruise(expo, omedata); try { // This is using the PI OME XML file at this time omePdfGenerator.createPiOmePdf(expo); } catch (Exception ex) { throw new IllegalArgumentException( "Unable to create the PDF from the OME XML: " + ex.getMessage()); } } else { cruise = cruiseHandler.addAddlDocToCruise(expo, metadata); } if (!Boolean.TRUE.equals(cruise.isEditable())) { QCEvent qcEvent = new QCEvent(); qcEvent.setExpocode(expo); qcEvent.setFlag(DashboardUtils.QC_UPDATED_FLAG); qcEvent.setFlagDate(new Date()); qcEvent.setRegionID(DashboardUtils.GLOBAL_REGION_ID); qcEvent.setVersion(version); qcEvent.setUsername(username); String comment; if (isOme) comment = "Update of OME metadata. "; else comment = "Update of metadata file \"" + uploadFilename + "\". "; comment += "Data and WOCE flags were not changed."; qcEvent.setComment(comment); try { // Add the 'U' QC flag dbHandler.addQCEvent(qcEvent); dsgFileHandler.updateQCFlag(qcEvent); // Update the dashboard status for the 'U' QC flag cruise.setQcStatus(DashboardUtils.QC_STATUS_SUBMITTED); // If archived, reset the archived status so the updated metadata will be archived if (cruise.getArchiveStatus().equals(DashboardUtils.ARCHIVE_STATUS_ARCHIVED)) cruise.setArchiveStatus(DashboardUtils.ARCHIVE_STATUS_WITH_SOCAT); cruiseHandler.saveCruiseInfoToFile(cruise, comment); } catch (Exception ex) { // Should not fail. // If does, do not delete the file since it is okay, and ignore the failure. ; } } } catch (Exception ex) { metadataItem.delete(); sendErrMsg(response, ex.getMessage()); return; } } // Send the success response response.setStatus(HttpServletResponse.SC_OK); response.setContentType("text/html;charset=UTF-8"); PrintWriter respWriter = response.getWriter(); respWriter.println(DashboardUtils.FILE_CREATED_HEADER_TAG); response.flushBuffer(); }
/** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String message = "File upload."; List<String> filenames = null; isMultipart = ServletFileUpload.isMultipartContent(request); HttpSession session = request.getSession(false); User loggedUser = null; if (session != null) loggedUser = (User) session.getAttribute("loggedUser"); if (loggedUser == null) { request.getRequestDispatcher("login.jsp").forward(request, response); } else { Book book = new Book(); if (isMultipart) { ServletContext context = this.getServletConfig().getServletContext(); DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory factory.setSizeThreshold(maxMemSize); // Location to save data that is larger than maxMemSize. File repoPath = (File) context.getAttribute("javax.servlet.context.tempdir"); factory.setRepository(repoPath); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // maximum file size to be uploaded. upload.setSizeMax(maxFileSize); try { List<FileItem> fileItems = upload.parseRequest(new ServletRequestContext(request)); filePath = request.getServletContext().getRealPath("/") + "picture/"; filenames = new ArrayList<String>(); for (FileItem fi : fileItems) { if (!fi.isFormField()) { // Get the uploaded file parameters String fieldName = fi.getFieldName(); if (fi.getName() != null && !fi.getName().equals("")) { String fileName = URLEncoder.encode(fi.getName(), "UTF-8"); String contentType = fi.getContentType(); boolean isInMemory = fi.isInMemory(); long sizeInBytes = fi.getSize(); file = new File(filePath + fileName); fi.write(file); book.setPictureURL("picture/" + fileName); } } else { String fieldName = fi.getFieldName(); String fieldValue = fi.getString(); if (fieldName.equals("title")) { if (fieldValue != null) { book.setTitle(fieldValue); ; } } if (fieldName.equals("authors")) book.setAuthors(fieldValue); if (fieldName.equals("publisher")) book.setPublisher(fieldValue); if (fieldName.equals("description")) if (fieldValue != null) { book.setDescription(fieldValue); } if (fieldName.equals("genre")) book.setGenre(fieldValue); if (fieldName.equals("numberInStock")) book.setNumberInStock(Integer.parseInt(fieldValue)); if (fieldName.equals("publicationYear")) book.setPublicationYear(Integer.parseInt(fieldValue)); if (fieldName.equals("price")) book.setPrice(Double.parseDouble(fieldValue)); } } } catch (Exception ex) { System.out.println(ex); } } BookDAO bookDao = new BookDAO(); bookDao.add(book); response.sendRedirect("LoginBookPreviewViewController"); } }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); String idx = request.getParameter("idx"); // 获得磁盘文件条目工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); // 获取文件需要上传到的路径 String rootPath = getServletContext().getRealPath("/upload"); // 如果没以下两行设置的话,上传大的 文件 会占用 很多内存, // 设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同 /** 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem 格式的 然后再将其真正写到 对应目录的硬盘上 */ File uploadDir = new File(rootPath); if (!uploadDir.exists()) { uploadDir.mkdirs(); } factory.setRepository(uploadDir); // 设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室 factory.setSizeThreshold(1024 * 1024); boolean isUpload = ServletFileUpload.isMultipartContent(request); // 高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory); try { // 可以上传多个文件 List<FileItem> list = (List<FileItem>) upload.parseRequest(request); for (FileItem item : list) { // 获取表单的属性名字 String fileName = item.getName(); // 如果获取的 表单信息是普通的 文本 信息 if (item.isFormField()) { } // 对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些 else { String md5Name = MD5Code.getInstance().getCode(fileName + System.currentTimeMillis()); String fiffux = fileName.substring(fileName.lastIndexOf(".")); // 真正写到磁盘上 // 它抛出的异常 用exception 捕捉 File f = new File(rootPath + File.separatorChar, md5Name + fiffux); if (!f.exists()) { f.createNewFile(); } item.write(f); // 第三方提供的 JSONObject result = new JSONObject(); JSONObject payload = new JSONObject(); responseJavaScript( out, "parent.uploadImageComplete('" + idx + "','" + (md5Name + fiffux) + "')"); out.close(); } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }