@Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { FResult<String> result = null; if (ex instanceof HttpRequestMethodNotSupportedException) { HttpRequestMethodNotSupportedException newExp = (HttpRequestMethodNotSupportedException) ex; result = FResult.newFailure(HttpResponseCode.CLIENT_PARAM_INVALID, newExp.getMessage()); } else if (ex instanceof MaxUploadSizeExceededException) { result = FResult.newFailure(HttpResponseCode.CLIENT_PARAM_INVALID, "上传文件大小超出限制"); } else if (ex instanceof SizeLimitExceededException) { result = FResult.newFailure(HttpResponseCode.CLIENT_PARAM_INVALID, "上传文件大小超出限制"); } else { result = FResult.newFailure(HttpResponseCode.SERVER_ERROR, ex.getMessage()); } ServletUtil.responseOutWithJson(response, result); return null; }
private List<FileEntry> uploadFiles(HttpServletRequest request, String spaceGuid) throws FileUploadException, IOException, FileStorageException, SLException { ServletFileUpload upload = getFileUploadServlet(); long maxUploadSize = getConfiguration().getMaxUploadSize(); upload.setSizeMax(maxUploadSize); List<FileEntry> uploadedFiles = new ArrayList<FileEntry>(); FileItemIterator fileItemIterator = null; try { fileItemIterator = upload.getItemIterator(request); } catch (SizeLimitExceededException ex) { throw new SLException(MessageFormat.format(Messages.MAX_UPLOAD_SIZE_EXCEEDED, maxUploadSize)); } while (fileItemIterator.hasNext()) { FileItemStream item = fileItemIterator.next(); if (item.isFormField()) { continue; // ignore simple (non-file) form fields } InputStream in = null; try { in = item.openStream(); FileEntry entry = getFileService().addFile(spaceGuid, item.getName(), getConfiguration().getFileUploadProcessor(), in); uploadedFiles.add(entry); } finally { IOUtils.closeQuietly(in); } } return uploadedFiles; }
/** * Allows to handle the file upload exceptions and to write them into the output * stream so that the client will be able to deserelize them and to show to the user. * @param logger the logger object * @param ex the exception that has happened * @param response the servlet responce * @param max_img_size_bytes the mazimum size dor the uploaded image * @throws IOException if smth bad happens */ public static void handleFileUploadExceptions(Logger logger, FileUploadException ex, HttpServletResponse response, final long max_img_size_bytes ) throws IOException { String errorCode = ""; if( ex instanceof IOFileUploadException ) { //Thrown to indicate an IOException logger.error( "An IOException exception while user-file upload." , ex); errorCode += ExceptionsSerializer.serialize( new InternalSiteException(InternalSiteException.IO_FILE_UPLOAD_EXCEPTION_ERR ) ); } else if( ex instanceof InvalidContentTypeException ) { //Thrown to indicate that the request is not a multipart request. logger.error( "An incorrect request while user-file upload." , ex); errorCode += ExceptionsSerializer.serialize( new InternalSiteException(InternalSiteException.INCORRECT_FILE_UPLOAD_REQUEST_EXCEPTION_ERR ) ); } else if( ex instanceof FileSizeLimitExceededException ) { //Thrown to indicate that A files size //exceeds the configured maximum. logger.warn( "File size exceeded while user-file upload" ); errorCode += ExceptionsSerializer.serialize( new UserFileUploadException( UserFileUploadException.FILE_IS_TOO_LARGE_ERR ) ); } else if( ex instanceof SizeLimitExceededException ){ //Thrown to indicate that the request size //exceeds the configured maximum. logger.warn( "Request size exceeded while user-file upload" ); UserFileUploadException nex = new UserFileUploadException( UserFileUploadException.FILE_IS_TOO_LARGE_ERR ); nex.setMaxUploadFileSize( max_img_size_bytes ); errorCode += ExceptionsSerializer.serialize( nex ); } else { //Some unknown exceptions, there should not be any else left, but just in case ... logger.error( "An unknown exception while user-file upload", ex); errorCode += ExceptionsSerializer.serialize( new InternalSiteException(InternalSiteException.UNKNOWN_INTERNAL_SITE_EXCEPTION_ERR ) ); } response.getWriter().println( errorCode ); }
/** * ファイルアップロードのサイズの上限を超えていないかどうかをチェックします。 * * @param request * リクエスト * @return ファイルアップロードのサイズの上限を超えていないかどうか。 超えていない場合はtrue。 */ public static boolean checkSizeLimit(HttpServletRequest request) { SizeLimitExceededException e = (SizeLimitExceededException) request .getAttribute(S2MultipartRequestHandler.SIZE_EXCEPTION_KEY); if (e != null) { ActionMessages errors = new ActionMessages(); errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage( "errors.upload.size", new Object[] { e.getActualSize(), e.getPermittedSize() })); ActionMessagesUtil.addErrors(request, errors); return false; } return true; }
/** * This method is called when the {@link SizeLimitExceededException} was thrown. */ protected void reportSizeLimitExceeded(final SizeLimitExceededException e, Validator validator) { validator.add(new I18nMessage("upload", "file.limit.exceeded", e.getActualSize(), e.getPermittedSize())); logger.warn("The file size limit was exceeded. Actual {} permitted {}", e.getActualSize(), e.getPermittedSize()); }