Package com.m4f.web.fileupload

Source Code of com.m4f.web.fileupload.CommonsStreamMultipartResolver

package com.m4f.web.fileupload;

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.util.FileCopyUtils;
import org.springframework.util.MultiValueMap;
import org.springframework.web.multipart.MultipartException;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;

public class CommonsStreamMultipartResolver extends CommonsMultipartResolver {
 
  private long fileSizeMax;
 
  public CommonsStreamMultipartResolver(long maxsize) {
    this.fileSizeMax = maxsize;
  }
 
  public void setFileSizeMax(long maxsize) {
    this.fileSizeMax = maxsize;
  }
 
  public long getFileSizeMax() {
    return this.fileSizeMax;
  }
 
  /**
     * {@inheritDoc}
     */
    @Override
    public boolean isMultipart(HttpServletRequest request) { 
        return request != null && ServletFileUpload.isMultipartContent(request);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request)
      throws MultipartException {
      ServletFileUpload upload = new ServletFileUpload();
        upload.setFileSizeMax(this.fileSizeMax*1000*1000);
        MultipartParameters multipartParameters;
        try {
            FileItemIterator iterator = upload.getItemIterator(request);
            multipartParameters = parseFileItems(iterator);
       } catch (FileUploadException e) {
          request.setAttribute("error-cause", "prueba");
            throw new MultipartException("Could not parse multipart servlet request", e);
        } catch (IOException e) {
          request.setAttribute("error-cause", e.getCause());
            throw new MultipartException("Could not parse multipart servlet request", e);
        }
        MultiValueMap<String, MultipartFile> fileParameters = multipartParameters.getMultipartFileParameters();
        Map<String, String[]> stringParameters = multipartParameters.getStringParameters();
        return new DefaultMultipartHttpServletRequest(request, fileParameters, stringParameters);
    }

    /**
     * Parses file items and adds them as either string parameters or multipart file parameters to a new instance of
     * {@code ParametersAndFiles}.
     *
     * @param iterator to iterate over file items
     * @throws FileUploadException when something goes wrong while parsing a file item
     * @throws IOException when something else goes wrong related to input streams.
     * @return parameters and files
     */
    private MultipartParameters parseFileItems(FileItemIterator iterator) throws FileUploadException, IOException {
        MultipartParameters multipartParameters = new MultipartParameters();
        while (iterator.hasNext()) {
            FileItemStream fileItemStream = iterator.next();
            String fieldName = fileItemStream.getFieldName();
            if (fileItemStream.getContentType() == null) {
                // The FileItemStream represents a simple String parameter when there is no content type
                String fieldValue = FileCopyUtils.copyToString(new InputStreamReader(fileItemStream.openStream()));
                multipartParameters.addStringParameter(fieldName, fieldValue);
            } else {
                // The FileItemStream represents an actual file
                MultipartFile multipartFile = new CommonsStreamMultipartFile(fileItemStream);
                multipartParameters.addMultipartFileParameter(fieldName, multipartFile);
            }
        }
        return multipartParameters;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void cleanupMultipart(MultipartHttpServletRequest request) {
        // No cleanup necessary
    }

   
}
TOP

Related Classes of com.m4f.web.fileupload.CommonsStreamMultipartResolver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.