All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.web.multipart.cos.CosMultipartHttpServletRequest Maven / Gradle / Ivy

There is a newer version: 5.3.34
Show newest version
/*
 * Copyright 2002-2006 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.web.multipart.cos;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.oreilly.servlet.MultipartRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.AbstractMultipartHttpServletRequest;

/**
 * MultipartHttpServletRequest implementation for Jason Hunter's COS.
 * Wraps a COS MultipartRequest with Spring MultipartFile instances.
 *
 * 

Not intended for direct application usage. Application code can cast * to this implementation to access the underlying COS MultipartRequest, * if it ever needs to. * * @author Juergen Hoeller * @since 06.10.2003 * @see CosMultipartResolver * @see com.oreilly.servlet.MultipartRequest */ public class CosMultipartHttpServletRequest extends AbstractMultipartHttpServletRequest { protected static final Log logger = LogFactory.getLog(CosMultipartHttpServletRequest.class); private final MultipartRequest multipartRequest; /** * Wrap the given HttpServletRequest in a MultipartHttpServletRequest. * @param request the servlet request to wrap * @param multipartRequest the COS multipart request to wrap */ protected CosMultipartHttpServletRequest(HttpServletRequest request, MultipartRequest multipartRequest) { super(request); this.multipartRequest = multipartRequest; setMultipartFiles(initFileMap(multipartRequest)); } /** * Return the underlying com.oreilly.servlet.MultipartRequest * instance. There is hardly any need to access this. */ public MultipartRequest getMultipartRequest() { return multipartRequest; } /** * Initialize a Map with file name Strings as keys and * CosMultipartFile instances as values. * @param multipartRequest the COS multipart request * to get the multipart file data from * @return the Map with CosMultipartFile values */ private Map initFileMap(MultipartRequest multipartRequest) { Map files = new HashMap(); Enumeration fileNames = multipartRequest.getFileNames(); while (fileNames.hasMoreElements()) { String fileName = (String) fileNames.nextElement(); files.put(fileName, new CosMultipartFile(fileName)); } return files; } public Enumeration getParameterNames() { return this.multipartRequest.getParameterNames(); } public String getParameter(String name) { return this.multipartRequest.getParameter(name); } public String[] getParameterValues(String name) { return this.multipartRequest.getParameterValues(name); } public Map getParameterMap() { Map params = new HashMap(); Enumeration names = getParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); params.put(name, getParameterValues(name)); } return Collections.unmodifiableMap(params); } /** * Implementation of Spring's MultipartFile interface on top * of a COS MultipartRequest object. */ private class CosMultipartFile implements MultipartFile { private final String name; private final File file; private final long size; public CosMultipartFile(String name) { this.name = name; this.file = multipartRequest.getFile(this.name); this.size = (this.file != null ? this.file.length() : 0); } public String getName() { return name; } public String getOriginalFilename() { String filename = multipartRequest.getOriginalFileName(this.name); return (filename != null ? filename : ""); } public String getContentType() { return multipartRequest.getContentType(this.name); } public boolean isEmpty() { return (this.size == 0); } public long getSize() { return this.size; } public byte[] getBytes() throws IOException { if (this.file != null && !this.file.exists()) { throw new IllegalStateException("File has been moved - cannot be read again"); } return (this.size > 0 ? FileCopyUtils.copyToByteArray(this.file) : new byte[0]); } public InputStream getInputStream() throws IOException { if (this.file != null && !this.file.exists()) { throw new IllegalStateException("File has been moved - cannot be read again"); } if (this.size != 0) { return new FileInputStream(this.file); } else { return new ByteArrayInputStream(new byte[0]); } } public void transferTo(File dest) throws IOException, IllegalStateException { if (this.file != null && !this.file.exists()) { throw new IllegalStateException("File has already been moved - cannot be transferred again"); } if (dest.exists() && !dest.delete()) { throw new IOException( "Destination file [" + dest.getAbsolutePath() + "] already exists and could not be deleted"); } boolean moved = false; if (this.file != null) { moved = this.file.renameTo(dest); if (!moved) { FileCopyUtils.copy(this.file, dest); } } else { dest.createNewFile(); } if (logger.isDebugEnabled()) { logger.debug("Multipart file '" + getName() + "' with original filename [" + getOriginalFilename() + "], stored " + (this.file != null ? "at [" + this.file.getAbsolutePath() + "]" : "in memory") + ": " + (moved ? "moved" : "copied") + " to [" + dest.getAbsolutePath() + "]"); } } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy