一个blog的上传功能当然是必不可少的,本例使用commons-fileupload-1.2.1实现
写了个接口如下,
public interface FileUpLoad {
public int getFileSize(String fieldName);
/**
* 取得上传文件的文件名
* @param fieldName
* @return
*/
public String getUpFileName(String fieldName);
/**
* 取得普通字段的值
* @param name
* @return
*/
public String getValueOfParameter(String fieldName);
/**
* 根据字段名称取得上传文件
* @param fieldName
* @return
*/
public File getFile(String fieldName);
/**
* 如果此字段不属于文件上传,则返回null
* @param fieldName
* @return
*/
public String getFileType(String fieldName);
/**
* 移动文件到targetFile,如果字段不是上传域则抛出RuntimeException。调用完成后源文件删除
* @param fieldName 上传域的字段
* @param targetFile 目标文件
*/
public void moveFile(String fieldName,File targetFile);
}
简单实现类如下
public class SimpleFileUpLoad implements FileUpLoad{
private Map<String, String> mapOfString = new HashMap<String, String>();
private Map<String, FileItem> mapOfFile = new HashMap<String, FileItem>();
/**
*
* @param tmpPath 临时文件位置
* @param maxSize 单个文件最大数,单位是KByte
* @param request
* @throws FileUploadException 超过最大限制抛出
* @throws IOException 解析失败抛出
*/
@SuppressWarnings("unchecked")
public SimpleFileUpLoad(String tmpPath,int maxSize,HttpServletRequest request) throws FileUploadException, IOException{
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置内存的最大数单位是bytes,超过了则存在硬盘上
factory.setSizeThreshold(4096);
//设置临时文件的目录
factory.setRepository(new File(tmpPath));
ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
//设置单个文件的最大大小,单位是bytes
servletFileUpload.setFileSizeMax(maxSize*1024);
//设置编码方式,为了防止中文乱码
servletFileUpload.setHeaderEncoding("UTF-8");
List<FileItem> fileItems = servletFileUpload.parseRequest(request);
Iterator<FileItem> it = fileItems.iterator();
while(it.hasNext()){
FileItem fileItem = it.next();
if(fileItem.isFormField()){
try {
//取得非上传域的表单字段,存在放置表单字段的map里面,字段名为key
mapOfString.put(fileItem.getFieldName(), fileItem.getString("UTF-8"));
} catch (UnsupportedEncodingException e) {
// UTF-8 why isn't a unCheckException?
}
}
else{
if(fileItem.getName()!=null && !fileItem.getName().equals("")){
//将上传文件对应的FileItem对象,存在文件的map里面,字段名为key
mapOfFile.put(fileItem.getFieldName(),fileItem);
}
}
}
}
//获得文件按的尺寸,没用到,因为一直返回0,所以从使用上传后的文件对象中获得大小。
@Override
public int getFileSize(String fieldName) {
if(!mapOfFile.containsKey(fieldName)) return 0;
return (int)mapOfFile.get(fieldName).getSize();
}
//返回上传文件的文件名,截取后的文件名,非全路径
@Override
public String getUpFileName(String fieldName) {
if(!mapOfFile.containsKey(fieldName)) return null;
String fileName = mapOfFile.get(fieldName).getName();
if(fileName.lastIndexOf("/")!=-1){
//linux
fileName = fileName.substring(fileName.lastIndexOf("/")+1);
}else fileName = fileName.substring(fileName.lastIndexOf("\\")+1);//windos
return fileName;
}
@Override
public File getFile(String fieldName) {
if(!mapOfFile.containsKey(fieldName)) return null;
return new File(mapOfFile.get(fieldName).getName());
}
//返回上传文件的类型,不过没用到这个功能。
@Override
public String getFileType(String fieldName) {
if(!mapOfFile.containsKey(fieldName)) return null;
return mapOfFile.get(fieldName).getContentType();
}
@Override
public String getValueOfParameter(String fieldName) {
return mapOfString.get(fieldName);
}
@Override
public void moveFile(String fieldName, File targetFile) {
if(!mapOfFile.containsKey(fieldName)) throw new RuntimeException("上传文件不存在!");
try {
//写入新文件
mapOfFile.get(fieldName).write(targetFile);
//然后删除临时文件
mapOfFile.get(fieldName).delete();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
使用的例子如下,以用于文件上传的servlet为例
public class DownFileServlet extends AbstractServlet {
private static final long serialVersionUID = 1L;
//get方法用于显示上传的文件
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
List<DownFile> downFileList = DaoFactory.getDownFileDao().getDownFileList();
BindData(req, "downFileList", downFileList);
forward("downfcontrol.jsp", req, resp);
}
//post方法用于处理上传文件的表单数据,完成后返回传页面
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String savePath = getServletContext().getRealPath("/down");
DownFile df = new DownFile();
FileUpLoad FileUpLoad=null;
String upFileName;
String saveName;
try {
//设置上传文件最大10M
FileUpLoad = new SimpleFileUpLoad(getTmp(), 10*1024, req);
} catch (FileUploadException e) {
BindData(req, "errorMsg", "上传文件失败!e:"+e.toString());
forwardResultPage(req, resp);
return;
}
upFileName = FileUpLoad.getUpFileName("upfile");
if(upFileName==null){
BindData(req, "errorMsg", "上传文件失败!上传文件不存在");
forwardResultPage(req, resp);
return;
}
//保存的实际文件名为当前时间的字符串形式,加上源文件的最后一个后缀名。如无后缀则只是时间按作为文件名
saveName = Calendar.getInstance().getTimeInMillis()+"";
if(upFileName.lastIndexOf(".")!=-1)
saveName = saveName+upFileName.substring(upFileName.lastIndexOf("."));
File saveFile = new File(savePath,saveName);
//将临时文件拷贝到保存目录
FileUpLoad.moveFile("upfile", saveFile);
df.setDownFileName(upFileName);
df.setDownFilePath(saveName);
df.setDownFileSize((int)saveFile.length()/1024+1);
DaoFactory.getDownFileDao().addDownFile(df);
sendRedirect("admin/downfcontrol.htm", req, resp);
}
}
很简单,不再介绍,jsp文件也不再贴出
分享到:
相关推荐
"超简单文件上传,只是一个控件"这个标题暗示我们将讨论一个简易的ASP.NET文件上传解决方案,它主要依赖于内置的FileUpload控件。C#是ASP.NET的主要编程语言,因此我们将深入探讨如何使用C#来处理文件上传。 文件...
阿里云存储简易文件上传系统 SWFUPLOAD v1.1 根目录版基于S3上传版本改来的。 阿里云存储简易文件上传系统1.1 更新 增加了底部显示客户的IP,提示勿上传非法文件 阿里云SDK更新至最新版本 根目录和子目录分开 ...
标题"java简单文件上传"暗示我们将关注如何使用Java Servlet来接收和处理上传的文件。以下是一个基本的步骤概述: 1. **创建HTML表单**:在前端,创建一个包含`<input type="file">`的表单,用户可以选取要上传的...
在提供的`MyUploadFile`压缩包中,可能包含了这个简易文件上传系统的具体实现,包括HTML表单、JavaScript的进度条逻辑以及Servlet的完整代码。解压后仔细查看,你将能更好地理解整个过程的实现细节。
本主题聚焦于"Silverlight简单文件上传",这是一个常见的功能需求,尤其在图片分享、内容管理系统或者社交媒体平台中。在Silverlight中实现文件上传,可以帮助用户方便地将本地文件,尤其是图片,上传到服务器。 ...
本资源“php简单文件上传源代码”是专为初学者设计的,旨在帮助他们理解和实现这一功能。下面我们将深入探讨这个话题,了解如何在PHP中执行文件上传。 首先,我们需要一个HTML表单来让用户选择他们想要上传的文件。...
本示例将详细介绍如何使用Indy组件集(Indy Internet Components)中的ICS(Internet Connection Suite)来实现一个简单的文件上传功能,特别是针对大于2GB的大文件上传场景。 Indy是一个广泛使用的开源组件库,...
本项目“简单文件上传,用到数据库”提供了一个基础的实现方案,非常适合初学者学习。它将文件上传与数据库操作相结合,使得上传的文件信息能够被持久化存储,便于后续的查询和管理。 首先,我们要理解文件上传的...
总的来说,这个"简单文件上传下载签收系统"是一个涵盖了前端交互、后端处理、数据库管理和安全策略的综合性项目。它有效地解决了文件共享和协作中的关键问题,为用户提供了一个可靠且便捷的平台。
本教程将详细解析如何使用Nginx、upload模块以及lua来搭建一个简单的文件上传系统。 首先,我们需要了解Nginx的ngx_http_upload_module模块,这是一个用于处理HTTP POST请求中的文件上传的第三方模块。它允许我们在...
阿里云存储简易文件上传系统 SWFUPLOAD v1.1 根目录版基于S3上传版本改来的。 阿里云存储简易文件上传系统1.1 更新 增加了底部显示客户的IP,提示勿上传非法文件 阿里云SDK更新至最新版本 根目录和子目录分开 下载URL...
云存储PHP简易文件上传系统 v1.3 For 阿里云存储 简单的上传和下载 适合个人和小企业分享文件 适合一些资源论坛 增加独立上传站点 作为附件使用 因为使用的云存储,文件基本不存在丢失的情况 使用说明: 使用...
通过这个简单的Struts1.2文件上传示例,我们可以学习到如何在Java Web环境中处理文件上传,理解MVC框架如何与外部库协同工作,以及如何在实际应用中确保文件上传的安全性。这对于任何想要深入理解Struts1.2或者进行...
云存储PHP简易文件上传系统 v1.3 For 阿里云存储 简单的上传和下载 适合个人和小企业分享文件 适合一些资源论坛 增加独立上传站点 作为附件使用 因为使用的云存储,文件基本不存在丢失的情况 使用说明: 使用...
总之,这个简单的PHP文件上传源码是一个很好的学习起点,它涵盖了文件上传的基本流程,对于初学者来说,通过阅读和理解源码中的注释,可以快速掌握PHP文件上传的核心知识。同时,随着技能的提升,还可以逐步学习更...
基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于...
一个简单的文件上传管理功能 一个简单的文件上传管理功能 一个简单的文件上传管理功能 一个简单的文件上传管理功能 一个简单的文件上传管理功能 一个简单的文件上传管理功能 一个简单的文件上传管理功能 一个简单的...
在这个"java web strut框架 简单文件上传"的示例中,我们将深入探讨如何在Struts框架下实现文件上传功能。 首先,我们需要理解文件上传的基本原理。在HTTP协议中,文件上传通常涉及到表单提交,尤其是当`enctype`...
【标题】"基于PHP的阿里云存储简易文件上传系统 php版 v1.1 根目录版.zip" 提供了一个使用PHP实现的轻量级文件上传解决方案,它与阿里云存储服务相结合,允许用户便捷地将文件上传到阿里云的对象存储服务(OSS)。...