/**
* created FileModel.java by Dirac on 2009-12-3 下午05:50:57
*/
package cn.boyi.upload;
import java.util.HashMap;
import java.util.Map;
/**
* @author Dirac
* @version 1.0
*/
public class FileModel {
private long size;
private int width;
private int height;
private String path;
private String ext;
private Map<String, String> params = new HashMap<String, String>(0);
/**
* @return 返回 path。
*/
public String getPath() {
return path;
}
/**
* @param path
* 要设置的 path。
*/
public void setPath(String path) {
this.path = path;
}
/**
* @return 返回 height。
*/
public int getHeight() {
return height;
}
/**
* @param height
* 要设置的 height。
*/
public void setHeight(int height) {
this.height = height;
}
/**
* @return 返回 size。
*/
public long getSize() {
return size;
}
/**
* @param size
* 要设置的 size。
*/
public void setSize(long size) {
this.size = size;
}
/**
* @return 返回 width。
*/
public int getWidth() {
return width;
}
/**
* @param width
* 要设置的 width。
*/
public void setWidth(int width) {
this.width = width;
}
/**
* @return 返回 扩展名。
*/
public String getExt() {
return ext;
}
/**
* @param ext 要设置的 扩展名。
*/
public void setExt(String ext) {
this.ext = ext;
}
/**
* @return the params
*/
public Map<String, String> getParams() {
return params;
}
}
/**
* created FileDirectoryCreator.java by Dirac on 2009-12-4 上午12:54:07
*/
package cn.boyi.upload;
/**
* @author Dirac
* @version 1.0
*/
public interface FileDirectoryCreator {
/**
* 获得文件的生成路径
* @return
*/
String createFileDirectory();
/**
* 获得文件名
* @return
*/
String createFileName();
/**
* 注入参数
* @param name
* @param value
*/
public void put(String name, String value);
}
/**
* created BaseFileDirectoryCreator.java by Dirac on 2009-12-4 上午01:02:06
*/
package cn.boyi.upload;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author Dirac
* @version 1.0
*/
public class BoyiFileDirectoryCreator implements FileDirectoryCreator {
Map<String, String> params = new HashMap<String, String>(0);
public BoyiFileDirectoryCreator(){}
public BoyiFileDirectoryCreator(String type, Integer id, String fileName){
params.put("type", type);
params.put("id", id==null ? null : String.valueOf(id));
params.put("fileName", fileName);
}
/**
* @see cn.boyi.upload.FileDirectoryCreator#createFileDirectory()
*/
@Override
public String createFileDirectory(){
String type = params.get("type");
String id = params.get("id");
Calendar cal = Calendar.getInstance();
StringBuilder fileDirectory = new StringBuilder("/upload/");
if(type!=null && !type.trim().equals(""))fileDirectory.append(type).append("/");
if(id!=null && !id.trim().equals(""))fileDirectory.append(id).append("/");
fileDirectory.append(cal.get(Calendar.YEAR)).append("-");
if(cal.get(Calendar.MONTH)<9)fileDirectory.append("0");
fileDirectory.append((cal.get(Calendar.MONTH) + 1)).append("-");
if(cal.get(Calendar.DAY_OF_MONTH)<10)fileDirectory.append("0");
fileDirectory.append(cal.get(Calendar.DAY_OF_MONTH)).append("/");
return fileDirectory.toString();
}
/**
* 注入参数
* @param name
* @param value
*/
public void put(String name, String value){
params.put(name, value);
}
/**
* @see cn.boyi.upload.FileDirectoryCreator#createFileName()
*/
@Override
public String createFileName() {
String oriParam = getParam("original");
boolean original = oriParam==null ? false : Boolean.valueOf(oriParam);
if(original && getParam("oriName")!=null)return getParam("oriName");
String fileName = params.get("fileName");
if(fileName==null)fileName = new SimpleDateFormat("yyyyMMddhhMMss").format(new Date());
return fileName;
}
/**
* 获取参数
* @param name
* @return
*/
private String getParam(String name){
return name==null || name.trim().equals("") ? null : params.get(name);
}
}
/**
* created FileUpload.java by Dirac on 2009-12-3 下午05:52:12
*/
package cn.boyi.upload;
import java.io.File;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* @author Dirac
* @version 1.0
*/
public class FileUpload {
/**
* Uploads file from HttpServletRequest,depends on commons-fileupload-1.2.1 and commons-io-1.3.2
*
* @param request
* @param basePath
* The path of the web context.
* @param fileDirectory 负责生成文件上传路径和名称
* @return the uploaded image path which is relative to the web context
*/
public static FileModel uploadFile(HttpServletRequest request, String basePath, FileDirectoryCreator fileDirectoryCreator) {
long maxSize = 1073741824;
FileModel model = new FileModel();
if(!ServletFileUpload.isMultipartContent(request))return null;
DiskFileItemFactory factory = new DiskFileItemFactory();
//设定内存可以存放文件的最大容量,单位字节,超过的部分会以临时文件的形式存放在硬盘上,这里设置成10兆
factory.setSizeThreshold(10485760);
File temp = new File(new StringBuilder(basePath).append("/temp").toString());
if(!temp.exists()){
temp.mkdirs();
}
//设置临时文件存放的位置
factory.setRepository(temp);
ServletFileUpload upload = new ServletFileUpload(factory);
//设置单个文件最大容量限制,-1表示没有限制
upload.setFileSizeMax(-1);
//设置整个请求的上传容量限制,-1表示没有限制
upload.setSizeMax(maxSize);
String image = "";
try {
List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> iterator = items.iterator();
FileItem uploadFile = null;
String encoding = request.getCharacterEncoding();
while (iterator.hasNext()) {
FileItem item = iterator.next();
org.apache.commons.fileupload.disk.DiskFileItem i;
if(item.isFormField()){
if(!item.getFieldName().equals("url")){
model.getParams().put(item.getFieldName(), item.getString(encoding));
fileDirectoryCreator.put(item.getFieldName(), item.getString(encoding));
}else if(item.getFieldName().equals("url")){
String old = item.getString(encoding);
if(old!=null && !old.trim().equals("")){
File file = new File(new StringBuffer(basePath).append("/").append(item.getString(encoding)).toString());
if(file.exists())file.delete();
}
}
continue;
}
String name = item.getName();
long size = item.getSize();
model.setSize(size);
if (size == 0) {
continue;
}
if(name==null || name.equals(""))
continue;
//System.out.println(name);
if(name.indexOf("\\")!=-1){
name = name.substring(name.lastIndexOf("\\") + 1);
}else if(name.indexOf("/")!=-1){
name = name.substring(name.lastIndexOf("/")+1);
}
fileDirectoryCreator.put("oriName", name.substring(0, name.lastIndexOf(".")));
model.setExt(name.substring(name.lastIndexOf(".")));
uploadFile = item;
}
Enumeration<String> names = request.getParameterNames();
while(names.hasMoreElements()){
String name = names.nextElement();
String value = request.getParameter(name);
if(value!=null && !value.trim().equals(""))fileDirectoryCreator.put(name, value);
}
String fileDirectory = fileDirectoryCreator.createFileDirectory();
String dir = new StringBuffer(basePath).append(fileDirectory).toString();
String path = new StringBuffer(fileDirectory).append(fileDirectoryCreator.createFileName()).toString();
if (!new File(dir).exists()) {
new File(dir).mkdirs();
}
String title = model.getParams().get("title");
if(title!=null && !title.trim().equals("")){
path = new StringBuffer(fileDirectory).append(title).toString();
}else{
path = new StringBuffer(fileDirectory).append(fileDirectoryCreator.createFileName()).toString();
}
image = new StringBuffer(path).append(model.getExt()).toString();
File file = new File(new StringBuffer(basePath).append(image).toString());
int index = 1;
while(file.exists()){
image = new StringBuffer(path).append("(").append(index).append(")").append(model.getExt()).toString();
file = new File(new StringBuffer(basePath).append(image).toString());
++index;
}
model.setPath(image);
if(uploadFile!=null)uploadFile.write(file);
} catch (Exception e) {
e.printStackTrace();
}
return model;
}
}
分享到:
相关推荐
在这个场景中,`commons-fileupload-1.3.1.jar` 和 `commons-io-2.4.jar` 是两个至关重要的库,它们提供了强大的文件上传支持。 `commons-fileupload-1.3.1.jar` 是Apache Commons FileUpload项目的实现,这是一个...
在Web应用中,用户可能需要上传图片、文档等文件,这时`commons-fileupload`就发挥了重要作用。本篇文章将深入探讨这个组件的使用方法以及可能出现的问题。 首先,我们来看`demo.jsp`和`upload.jsp`这两个文件。`...
在Java开发中,上传文件是一项常见的任务,而`commons-fileupload-1.3.3.jar`和`commons-io-2.6.jar`是Apache Commons项目中的两个重要库,专门用于处理HTTP请求中的文件上传功能。这两个库为开发者提供了便捷、高效...
Commons-Fileupload是Apache Commons项目的一个子项目,专门设计用于处理Servlet容器中的文件上传请求。它提供了一套API,使得开发者可以方便地解析HTTP请求中的多部分(multipart)数据,这些数据通常包含文件上传...
`commons-fileupload-1.3.3.jar` 和 `commons-io-2.5.jar` 是Apache Commons项目中的两个重要库,它们提供了强大的文件上传功能,使得开发者可以轻松地处理用户通过表单提交的文件。 Apache Commons FileUpload是...
至于文件列表中提到的"Roger",这可能是实际的项目文件或代码示例,具体内容没有给出,但根据标题“demo”可以推测,这可能是一个演示如何使用`commons-fileupload`进行图片上传的Java代码示例。 在实际应用中,...
【使用commons-fileupload上传文件】 Apache Commons FileUpload是Apache组织的一个子项目,专注于处理HTTP文件上传。这个组件提供了一个简洁的API,使得开发者能够轻松地在Java应用中处理由浏览器发送的多部分...
总结起来,Apache Commons FileUpload是一个强大的、高度可配置的文件上传组件,它简化了Java Web应用中处理文件上传的复杂性。通过结合使用`commons-fileupload-1.3.1.jar`和`commons-fileupload-1.3.1-sources.jar...
本主题将深入探讨两种常见的Java上传组件——SmartUpload和Commons-Fileupload。 SmartUpload是一个强大的Java上传组件,由Julien DROUET开发,它为JSP和Servlet提供了方便的文件上传功能。SmartUpload提供了一套...
Apache Commons FileUpload和Commons IO是两个非常重要的库,它们为Java提供了强大的文件上传和处理能力。在这个场景中,我们关注的是"commons-fileupload-1.3.jar"和"commons-io-1.2.jar"这两个文件,它们被打包在...
在处理文件上传时,`commons-fileupload`可能会依赖`commons-io`来完成一些底层的文件操作,比如读写文件、复制文件、检查文件是否存在等。`1.3.2`同样表示这个库的一个特定版本,它可能包含了更多的功能和改进。 ...
总之,`commons-fileupload-1.2.2.jar`和`commons-io-2.4.jar`是Java Web开发中处理文件上传和下载不可或缺的工具。尽管它们的版本可能不是最新的,但依然能提供可靠的功能,并且在很多现有的系统中广泛使用。理解并...
6. **安全性考虑**:在使用`commons-fileupload`进行文件上传时,需要考虑安全性问题,比如防止恶意文件上传、限制文件大小和类型、以及对上传文件的路径安全控制,防止路径遍历攻击。 7. **与其他库的集成**:`...
Apache Commons FileUpload与Apache Commons IO是Java开发中处理文件上传的两个重要库。它们为开发者提供了强大而灵活的工具,使得在Web应用中处理文件上传变得简单易行。 `commons-fileupload-1.2.1.jar`是Apache ...
在Java开发中,`commons-fileupload`和`commons-io`是两个非常重要的库,它们主要用于处理文件上传和I/O操作。这两个库为开发者提供了高效、便捷的文件处理能力,极大地简化了相关编程任务。 `commons-fileupload`...
Apache Commons FileUpload和Commons IO两个库是Java中处理文件上传的关键组件,它们为SpringMVC和MyBatis这样的框架提供了强大的支持。本篇文章将深入探讨这两个库以及它们在图片处理中的作用。 首先,`commons-...
标题中的"commons-fileupload-1.3.3&commons-fileupload-1.3.3架包和代码.rar"提到了Apache Commons FileUpload的1.3.3版本的库及其源码。Apache Commons FileUpload是一个Java库,专门用于处理HTTP协议中的多部分...
`commons-fileupload`简化了开发人员在服务器端接收、解析并存储上传文件的过程。 #### 二、准备工作 为了能够在Web应用中使用`commons-fileupload`进行文件上传和下载操作,首先需要按照以下步骤准备实验环境: ...
commons-fileupload-1.2.1.jar和...commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 案例上传: http://hi.baidu.com/lichao77821/blog commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar apache 常用的包。
第1个上传组件commons-fileupload =============commons-fileupload ================ common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载。该组件简单...