Java Web笔记:文件上传

文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,本篇主要说明smartupload组件上传。

在讲解smartupload上传前,我们先来看看不使用组件是怎么完成上传的原理的?

废话不多说直接上代码

import java.io.*;import java.util.*;import javax.servlet.http.HttpServletRequest;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;public class FileUploadTools {List<FileItem> items = Map<String, List<String>> Map<String, FileItem> files = new HashMap<String, FileItem>();FileUploadTools(HttpServletRequest request, int maxSize,String tempDir) throws Exception { .request = request;// 接收request对象DiskFileItemFactory factory = (tempDir != null) {// 判断是否需要进行临时上传目录factory.setRepository(new File(tempDir)); // 设置临时文件保存目录}ServletFileUpload upload = (maxSize > .maxSize = maxSize;}upload.setFileSizeMax( {this.items = upload.parseRequest(request);// 接收全部内容} catch (FileUploadException e) {throw e;// 向上抛出异常}this.init();// 进行初始化操作 }Iterator<FileItem> iter = this.items.iterator();IPTimeStamp its = new IPTimeStamp(this.request.getRemoteAddr()) ;while (iter.hasNext()) {// 依次取出每一个上传项FileItem item = iter.next();(item.isFormField()) {// 判断是否是普通的文本参数String name = item.getFieldName(); // 取得表单的名字String value = item.getString(); // 取得表单的内容List<String> temp = (this.params.containsKey(name)) { // 判断内容是否已经存放temp = this.params.get(name); // 如果存在则取出} else {// 不存在temp = new ArrayList<String>(); // 重新开辟List数组}temp.add(value);.params.put(name, temp);// 向Map中增加内容} else {// 判断是否是file组件String fileName = its.getIPTimeRand()+ + item.getName().split()[1];this.files.put(fileName, item); // 保存全部的上传文件}}}public String getParameter(String name) {// 取得一个参数String ret = null;// 保存返回内容List<String> temp = (temp != null) {// 判断是否可以根据key取出内容ret = temp.get(0);// 取出里面的内容}return ret;}public String[] getParameterValues(String name) { // 取得一组上传内容String ret[] = null;// 保存返回内容List<String> temp = (temp != null) {// 避免NullPointerExceptionret = temp.toArray(new String[] {});// 将内容变为字符串数组}return ret;// 变为字符串数组 }.files;// 得到全部的上传文件 }public List<String> saveAll(String saveDir) throws IOException { // 保存全部文件,并返回文件名称,所有异常抛出List<String> names = new ArrayList<String>();if (this.files.size() > 0) {Set<String> keys = this.files.keySet(); // 取得全部的keyIterator<String> iter = keys.iterator(); // 实例化Iterator对象File saveFile = null;// 定义保存的文件InputStream input = null;// 定义文件的输入流,用于读取源文件OutputStream (iter.hasNext()) {// 循环取出每一个上传文件FileItem item = this.files.get(iter.next()); // 依次取出每一个文件String fileName = new IPTimeStamp(this.request.getRemoteAddr()).getIPTimeRand()+ + item.getName().split()[1];saveFile = new File(saveDir + fileName);// 重新拼凑出新的路径names.add(fileName); {input = item.getInputStream();= temp = ((temp = input.read()) != -.write(temp);// 保存内容}} e;// 异常向上抛出} {input.close();.close();// 关闭输出流} catch (IOException e1) {throw e1;}}}}return names;// 返回生成后的文件名称 }}

上面代码便可以完成无组件上传。

下面开始讲解smartupload

smartupload是由网站开发的一套上传组件包,可以轻松的实现文件的上传及下载功能,smartupload组件使用简单、可以轻松的实现上传文件类型的限制、也可以轻易的取得上传文件的名称、后缀、大小等。

smartupload本身是一个系统提供的jar包(smartupload.jar),用户直接将此包放到classpath下即可,也可以直接将此包拷贝到TOMCAT_HOME\lib目录之中。

下面使用组件完成上传

单一文件上传:

smartupload组件上传图片

jsp代码:

smartupload_demo01.jsp

比天才难得,许多天赋差的人经过过勤学苦练也取得了很大的成功。

Java Web笔记:文件上传

相关文章:

你感兴趣的文章:

标签云: