private static FileItemFactory getDefaultFileItemFactory(final int threshold) { final DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); diskFileItemFactory.setFileCleaningTracker( new FileCleaningTracker() ); diskFileItemFactory.setSizeThreshold( threshold ); return diskFileItemFactory; }
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { boolean isMultipart = ServletFileUpload.isMultipartContent(req); HttpSession session = req.getSession(false); Integer userId = (int)session.getAttribute("id_user"); Integer orderId = (int)session.getAttribute("currentOrder"); PrintWriter out = resp.getWriter(); JsonObject jsonObject = new JsonObject(); if(isMultipart && userId != -1 && orderId != -1){ // Create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); // Configure a repository (to ensure a secure temp location is used) ServletContext servletContext = this.getServletConfig().getServletContext(); FileCleaningTracker tracker = FileCleanerCleanup.getFileCleaningTracker(servletContext); factory.setFileCleaningTracker(tracker); File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir"); factory.setRepository(repository); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); try { List<FileItem> items = upload.parseRequest(req); for (FileItem imageFile : items){ byte[] imageByte = imageFile.get(); Order order = new Order(); order.setId(orderId); Image image = new Image(); image.setDataimage(imageByte); image.setOrder(order); new ImageDBManager().create(image); } jsonObject.addProperty("success", true); } catch (FileUploadException e) { jsonObject.addProperty("success", false); e.printStackTrace(); } } else { jsonObject.addProperty("success", false); } out.append(jsonObject.toString()); out.flush(); }
/** * 设置临时文件跟踪器,参考:{@link DiskFileItemFactory#setFileCleaningTracker(FileCleaningTracker)} * * @param factoryCleaningTracker */ public void setFactoryCleaningTracker( FileCleaningTracker factoryCleaningTracker) { this.factoryCleaningTracker=factoryCleaningTracker; }
/** * Create a new {@link org.apache.commons.fileupload.disk.DiskFileItem} * instance from the supplied parameters and the local factory * configuration. * * @param fieldName The name of the form field. * @param contentType The content type of the form field. * @param isFormField <code>true</code> if this is a plain form field; * <code>false</code> otherwise. * @param fileName The name of the uploaded file, if any, as supplied * by the browser or other client. * * @return The newly created file item. */ public FileItem createItem(String fieldName, String contentType, boolean isFormField, String fileName) { DiskFileItem result = new DiskFileItem(fieldName, contentType, isFormField, fileName, sizeThreshold, repository); FileCleaningTracker tracker = getFileCleaningTracker(); if (tracker != null) { tracker.track(result.getTempFile(), result); } return result; }
/** * Returns the instance of {@link FileCleaningTracker}, which is * associated with the given {@link ServletContext}. * * @param pServletContext The servlet context to query * @return The contexts tracker */ public static FileCleaningTracker getFileCleaningTracker(ServletContext pServletContext) { return (FileCleaningTracker) pServletContext.getAttribute(FILE_CLEANING_TRACKER_ATTRIBUTE); }
/** * Sets the instance of {@link FileCleaningTracker}, which is * associated with the given {@link ServletContext}. * * @param pServletContext The servlet context to modify * @param pTracker The tracker to set */ public static void setFileCleaningTracker(ServletContext pServletContext, FileCleaningTracker pTracker) { pServletContext.setAttribute(FILE_CLEANING_TRACKER_ATTRIBUTE, pTracker); }
/** * Called when the web application is initialized. Does * nothing. * * @param sce The servlet context, used for calling * {@link #setFileCleaningTracker(ServletContext, FileCleaningTracker)}. */ public void contextInitialized(ServletContextEvent sce) { setFileCleaningTracker(sce.getServletContext(), new FileCleaningTracker()); }
/** * Returns the tracker, which is responsible for deleting temporary * files. * * @return An instance of {@link FileCleaningTracker}, or null * (default), if temporary files aren't tracked. */ public FileCleaningTracker getFileCleaningTracker() { return fileCleaningTracker; }
/** * Sets the tracker, which is responsible for deleting temporary * files. * * @param pTracker An instance of {@link FileCleaningTracker}, * which will from now on track the created files, or null * (default), to disable tracking. */ public void setFileCleaningTracker(FileCleaningTracker pTracker) { fileCleaningTracker = pTracker; }
/** * 获取临时文件跟踪器,参考:{@link DiskFileItemFactory#getFileCleaningTracker()} * * @return */ public FileCleaningTracker getFactoryCleaningTracker() { return factoryCleaningTracker; }