/**
* Copyright 2011 ASTO.
* All right reserved.
* Created on 2011-3-17
*/
package net.caiban.utils.upload;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import net.caiban.utils.upload.filter.AbstractUploadFilter;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartRequest;
import com.google.common.base.Strings;
import com.google.common.collect.Maps;
/**
*
* Replaced by LocalUploader
* @author mays (mays@caiban.net)
*
* created on 2014-12-22
*/
@Deprecated
public class MvcUpload {
/**
* Default file input name
*/
final static String DEFAULT_INPUT="uploadfile";
public static UploadResult localUpload(HttpServletRequest request,
String path) throws IOException, UploadException {
return localUpload(getMultipartFile(request), path, null, null);
}
public static UploadResult localUpload(HttpServletRequest request,
String path, AbstractUploadFilter filter) throws IOException,
UploadException {
return localUpload(getMultipartFile(request), path, null, filter);
}
public static Map<String, UploadResult> batchLocalUpload(
HttpServletRequest request, String path){
return batchLocalUpload(request, path, null, null);
}
public static Map<String, UploadResult> batchLocalUpload(
HttpServletRequest request, String path, String rename){
return batchLocalUpload(request, path, rename, null);
}
public static Map<String, UploadResult> batchLocalUpload(
HttpServletRequest request, String path,
AbstractUploadFilter filter){
return batchLocalUpload(request, path, null,filter);
}
/**
* @param request
* @param path: The dist path of uploaded file.
* @param rename: Set null if you wan't rename uploaded file, but it will add -{index} after the rename string.
* @param filter
* @return
*/
public static Map<String, UploadResult> batchLocalUpload(
HttpServletRequest request, String path, String rename,
AbstractUploadFilter filter){
MultipartRequest multipartRequest = (MultipartRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
Map<String, UploadResult> resultMap = Maps.newHashMap();
int i=0;
for(String inputFileName: fileMap.keySet()){
try {
String renamePlus = null;
if(!Strings.isNullOrEmpty(rename)){
renamePlus = rename+"-"+String.valueOf(i+1);
i++;
}
UploadResult result = localUpload(fileMap.get(inputFileName), path, renamePlus, filter);
resultMap.put(inputFileName, result);
} catch (IOException e) {
UploadResult result = new UploadResult();
result.setError(e.getMessage());
resultMap.put(inputFileName, result);
} catch (UploadException e) {
UploadResult result = new UploadResult();
result.setError(e.getMessage());
resultMap.put(inputFileName, result);
}
}
return resultMap;
}
public static MultipartFile getMultipartFile(HttpServletRequest request, String fileInputName){
MultipartRequest multipartRequest = (MultipartRequest) request;
MultipartFile file = multipartRequest.getFile(fileInputName);
return file;
}
public static MultipartFile getMultipartFile(HttpServletRequest request){
return getMultipartFile(request, DEFAULT_INPUT);
}
/**
* @param file: MultipartFile Object
* @param path: The dist path of upload file.
* @param rename: Set null if you wan't rename uploaded file.
* @param filter: Upload filter by suffix
* @return
* @throws IOException
* @throws UploadException
*/
public static UploadResult localUpload(MultipartFile file, String path,
String rename, AbstractUploadFilter filter) throws IOException, UploadException {
String originalName = file.getOriginalFilename();
if (Strings.isNullOrEmpty(originalName)) {
throw new UploadException("Empty name of uploaded file.");
}
if(filter!=null){
filter.filter(originalName);
}
String resultName = originalName;
if (!Strings.isNullOrEmpty(rename)) {
int start = originalName.lastIndexOf(".");
start = start == -1?0:start;
String suffix = originalName.substring(start, originalName.length());
suffix = suffix.startsWith(".")?suffix:"."+suffix;
resultName = rename + suffix;
}
if (!path.endsWith("/")) {
path = path + "/";
}
File upfile = new File(path + resultName);
try {
file.transferTo(upfile);
UploadResult result = new UploadResult(path, originalName, resultName);
return result;
} catch (IllegalStateException e) {
throw new UploadException("Error upload file, uploaded path is "+path+originalName+" Error message: "+e.getMessage(), e);
} catch (IOException e) {
throw new UploadException("Error upload file, uploaded path is "+path+originalName+" Error message: "+e.getMessage(), e);
}
}
}