common-upload上传文件功能封装类分享

文件屬性bean


代码如下:

package com.onsafe.util.upload;

/**
 * 文件屬性bean
 * @author lushuifa
 */
public class FileBean {
 private String fileName;// 文件名
 private String fileContentType;// 上传文件的数据类型
 private long fileSize;// 文件的大小;单位byte
 private String extName;// 文件扩展名的大小
 private String fieldName;
 private String filePath;
 private String fileNote;//文件说明
 private String newFileName;//新文件名

public String getFileName() {
  return fileName;
 }

public void setFileName(String fileName) {
  this.fileName = fileName;
 }

public String getFileContentType() {
  return fileContentType;
 }

public void setFileContentType(String fileContentType) {
  this.fileContentType = fileContentType;
 }

public long getFileSize() {
  return fileSize;
 }

public void setFileSize(long fileSize) {
  this.fileSize = fileSize;
 }

public String getExtName() {
  return extName;
 }

public void setExtName(String extName) {
  this.extName = extName;
 }

public String getFilePath() {
  return filePath;
 }

public void setFilePath(String filePath) {
  this.filePath = filePath;
 }

public String getFieldName() {
  return fieldName;
 }

public void setFieldName(String fieldName) {
  this.fieldName = fieldName;
 }

public String getFileNote() {
  return fileNote;
 }

public void setFileNote(String fileNote) {
  this.fileNote = fileNote;
 }

public String getNewFileName() {
  return newFileName;
 }

public void setNewFileName(String newFileName) {
  this.newFileName = newFileName;
 }
}

上传工具类


代码如下:

package com.onsafe.util.upload;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.onsafe.util.ChineseSpelling;

/**
 * 上传工具类
 * @author Administrator
 *
 */
public class UploadTools {

protected final static Log log = LogFactory.getLog(UploadTools.class);

private HttpServletRequest request = null;
 private String savePath = "";
 private List<FileBean> fileBeanList = null;
 //上传表单的其它信息,除file类型的input
 private Map<String,String> formDatas = null;
 private String uploadStatus = "";
 //文件单个最大大小
 private long maxSize;
 //文件允许的格式为
 private String allowExts;
 //文件不允许的格式为
 private String unAllowExts;

public void uploadFiles() {
  savePath = this.getSavePath();
  fileBeanList = new ArrayList<FileBean>();
  formDatas    = new HashMap<String,String>();
  DiskFileItemFactory factory = new DiskFileItemFactory();
  ServletFileUpload upload = new ServletFileUpload(factory);
  try {
   List<FileItem> items = upload.parseRequest(this.getRequest());//上传文件解析
   //表单元素集合
   List<FileItem> formFieldList = new ArrayList<FileItem>();
   //文件元素集合
   List<FileItem> fileFieldList = new ArrayList<FileItem>();
   if (items.size()>0) {
    //将表单元素和文件元素装载到不同的集合中
    for (FileItem fileItem : items) {
     if (fileItem.isFormField()) {
      formFieldList.add(fileItem);
     } else {
      fileFieldList.add(fileItem);
     }
    }

/**
     * 分解表单元素
     */
    //初始化文件上传属性bean
    FileBean fileBean = null;
    for (FileItem fileItem : formFieldList) {
     System.out.println("表单参数名:" + fileItem.getFieldName()+ ",表单参数值:" + fileItem.getString("UTF-8"));
     formDatas.put(fileItem.getFieldName(), fileItem.getString("UTF-8").replace("'", "''"));
     if(fileItem.getFieldName().equals("companyName")){
      savePath = savePath.replace("gongsi", ChineseSpelling.getSpell(fileItem.getString("UTF-8")));
     }

if(fileItem.getFieldName().toLowerCase().contains("colum")){
      savePath = savePath.replace("lanmu", ChineseSpelling.getSpell(fileItem.getString("UTF-8")));
     }

if(fileItem.getFieldName().equals("articleUUID")){
      savePath = savePath.replace("uuid", fileItem.getString("UTF-8"));
     }
    }
    log.info("保存的真实路径为:"+savePath);

/**
     * 分解文件元素
     */
    for (FileItem fileItem : fileFieldList) {
     //先判断文件件域是否选择了文件
     if (fileItem.getName() != null && !fileItem.getName().equals("")) {
      //文件名
      String fileName = fileItem.getName();
      // IE 和 FireFox 下的 getName() 得出的值不同
                        // IE 下得到的是文件的完整路径
                        if(fileName.contains("\\")) {
                            // 截取得到完整路径后的文件名
                         fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
                        }
      //文件大小
      long fileSize = fileItem.getSize();
      //检查扩展名
      String extName = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
                        //文件属性bean
      fileBean = new FileBean();
      fileBean.setFileName(fileName);
      fileBean.setExtName(extName);
      fileBean.setFileSize(fileSize);
      SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
      //文件名转拼音
      String pingyingFileName = ChineseSpelling.getSpell(fileName);
      String newFileName = df.format(new Date()) + "_" + pingyingFileName;

fileBean.setFilePath(savePath+newFileName);
      fileBean.setFieldName(fileItem.getFieldName());
      fileBean.setNewFileName(newFileName);
      File f1 = new File(savePath);
      if (!f1.exists()) {
       f1.mkdirs();
      }
      System.out.println("新文件路径:"+newFileName);
      File uploadedFile = new File(savePath, newFileName);
      fileItem.write(uploadedFile);
      // 获取根目录对应的真实物理路径
      // 保存文件在服务器的物理磁盘中
      System.out.println("上传文件的大小:" + fileItem.getSize());
      System.out.println("上传文件的类型:" + fileItem.getContentType());
      System.out.println("上传文件的名称:" + fileName);
      fileBeanList.add(fileBean);
      uploadStatus = "上传成功";
     } else {
      uploadStatus = "没有选择文件!";
     }
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
   uploadStatus =  "上传文件失败!";
  }
 }

public List<FileBean> getFileBeanList() {
  return fileBeanList;
 }

public void setFileBeanList(List<FileBean> fileBeanList) {
  this.fileBeanList = fileBeanList;
 }

public HttpServletRequest getRequest() {
  return request;
 }

public void setRequest(HttpServletRequest request) {
  this.request = request;
 }

public String getSavePath() {
  return savePath;
 }

public void setSavePath(String savePath) {
  this.savePath = savePath;
 }

public Map<String, String> getFormDatas() {
  return formDatas;
 }

public void setFormDatas(Map<String, String> formDatas) {
  this.formDatas = formDatas;
 }

public String getUploadStatus() {
  return uploadStatus;
 }

public void setUploadStatus(String uploadStatus) {
  this.uploadStatus = uploadStatus;
 }

public long getMaxSize() {
  return maxSize;
 }

public void setMaxSize(long maxSize) {
  this.maxSize = maxSize;
 }

public String getAllowExts() {
  return allowExts;
 }

public void setAllowExts(String allowExts) {
  this.allowExts = allowExts;
 }

public String getUnAllowExts() {
  return unAllowExts;
 }

public void setUnAllowExts(String unAllowExts) {
  this.unAllowExts = unAllowExts;
 }
}

运用工具类

代码如下:

// 实例化上传工具类
UploadTools uploadTools = new UploadTools();
uploadTools.setSavePath(savePath);
uploadTools.setRequest(wu.request);
uploadTools.uploadFiles();
Map<String, String> fds = uploadTools.getFormDatas();
List<FileBean> fileBeanList =uploadTools.getFileBeanList();

时间: 2014-01-06

android 上传文件到服务器代码实例

android对于上传文件,还是很简单的,和java里面的上传都是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要一些content-type这些参数的配置!  如果这些都弄好了,上传就很简单了!   下面是我写的一个上传的工具类: 复制代码 代码如下: package com.spring.sky.image.upload.network; import java.io.DataOutputStream;import java.io.File;import java.io.

php上传文件中文文件名乱码的解决方法

可能会有不少朋友碰到一些问题就是上传文件时如果是英文倒好原文名不会有问题,如果是中文可能就会出现乱码了,今天我来给大家总结一下导致乱码php上传文件中文文件名乱码的原因与解决办法吧. 这几天在windows下安装了XAMPP,准备初步学习一下php的相关内容.这几天接触到了php上传文件,但是出现了一个郁闷问题,我准备上传一个excel文件,但是如果文件名是中文名就会报错. 一来二去很是郁闷,后来仔细想了想应该是文件编码的问题,我写的php文件使用的是UTF-8编码,如果没有猜错APACHE处理

javascript验证上传文件的类型限制必须为某些格式

复制代码 代码如下: //验证文件的格式 function validateFile(){ var fileObject=$("#filename"); var errorObject=$("#error"); var filepath=fileObject.val(); var fileArr=filepath.split("//"); var fileTArr=fileArr[fileArr.length-1].toLowerCase().s

PHP上传文件时文件过大$_FILES为空的解决方法

在做图片上传的时候突然发现一张gif图片上传失败 size为0,实际大小为4.66M.上传小文件时可以,传大文件就不行,看了下PHP.INI里面upload_max_filesize = 2M, 问题就出在这了,修改其值 复制代码 代码如下: ; Maximum allowed size for uploaded files. upload_max_filesize = 20M 重启了下nginx问题解决.

详解jquery uploadify 上传文件

网上找了一天,大家都说Uploadify唯一的缺点就是不支持中文按钮,杯具之前,我看了下Uploadify的API,才发现了几个参数没被大家提及的,这正是解决此问题的关键.(以后坚决养成没事就看API的习惯)    Uploadify有一个参数是 buttonText 这个无论你怎么改都不支持中文,因为插件在js里用了一个转码方法把这个参数的值转过码了,解码的地方在那个swf文件里,看不到代码,所以这条路不行.    另一个参数,网上很少提到,是 buttonImg( 按钮图片),这时你完全可以

js 判断上传文件大小及格式代码

我们在做文件上传时,为了实现异步上传的效果,一般会选择采用iframe的形式来进行文件的上传,但我们不能像ajax那样对服务端返回的数据进行处理,从而来进行文件大小以及文件样式的判断,所以我们一般也会想到使用js对上传的文件大小以及格式进行初步的判断,在服务端再进行一次判断(防止浏览器拒绝执行脚本文件). 以下提供一种方法用js判断文件大小. 复制代码 代码如下: var url = window.location.href, type = url.substr(url.lastIndexOf(

jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)

特点: 1.不依赖与jquery 2.而且,好看些吧..支持很多实例,上传成功后.会有一个回调函数.比如缩略图地址显示出来 用法: 复制代码 代码如下: <link href="http://fineuploader.com/source/fineuploader-3.9.1.min.css" rel="stylesheet" /><script src="http://fineuploader.com/source/fineupload

TinyMCE 新增本地图片上传功能

这样TinyMCE 就可以正常显示图片了.其实该功能属于普通HTML富文本控件基本功能了.现有需求将TinyMCE 扩展成可直接上传本地图片而后在文本区域显示图片. 实现思路: 使用Ajax 进行图片上传,此上传方式可以更友好的实现TinyMCE 的图片上传扩展, 具体方法可以参考我的上一篇 Jquery ajaxsubmit 上传图片.将Ajax上传图片集成到 TinyMCE 中, 主要是修改TinyMCE 目录下的 tinymce\jscripts\tiny_mce\plugins 的 ad

php+html5实现无刷新图片上传教程

本篇向大家介绍一种全新的上传图片的方式,利用html5的FileReader读取图片文件,然后将数据传输到服务器再使用PHP进行处理.实现过程如下(带图片预览功能) 前端html代码 upload,html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content=&qu

thinkphp实现图片上传功能

关于图片上传,实现方法很多,比如可以用jQuery,当然,我们的thinkPHP内置了关于图片上传的功能,我们可以直接使用,使用方法如下: 首先,是表单书写,我们建立如下表单: <form action="__URL__/addChk" method="post" enctype="multipart/form-data"> <table cellspacing="1" cellpadding="2

spring boot实现图片上传和下载功能

这篇博客简单介绍下spring boot下图片上传和下载,已经遇到的问题.首先需要创建一个spring boot项目. 1.核心的controller代码 package com.qwrt.station.websocket.controller; import com.alibaba.fastjson.JSONObject; import com.qwrt.station.common.util.JsonUtil; import org.slf4j.Logger; import org.slf

vue+elementUi图片上传组件使用详解

上传组件封装需求分析 在基于elementUI库做的商城后台管理中,需求最大的是商品管理表单这块,因为需要录入各种各样的商品图片信息.加上后台要求要传递小于2M的图片,因此封装了一个upload.vue组件作为上传页面的子组件,它用于管理图片上传逻辑. upload.vue解析 upload主要用于实现表单上传图片的需求,主要由input +img 构成当没有图片的时候显示默认图片,有图片则显示上传图片,因为input样式不太符合需求所以只是将起设置为不可见,不能将其设置为display:non

php实现base64图片上传方式实例代码

本例子中没有采用File Post上传文件方式!原理一样,为了更加的理解base64 选择将其输出在文本域中,并提交至服务器!运用到项目中建议采用提交File方式. html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns=&q

vue+elementUI实现表单和图片上传及验证功能示例

本文实例讲述了vue+elementUI实现表单和图片上传及验证功能.分享给大家供大家参考,具体如下: 最终实现需求如下图: form表单内容与重点人员图片同时上传且图片为必填项 分析弹框页需要解决的问题有: 1.表单内容的验证及必填项 2.新增和编辑用同一个组件如何处理数据 3.图片需要和信息一起传递(即不允许自动上传) 4.图片必填的验证问题 针对上述问题作出方案: 1.el-form的表单验证需要注意几个地方: a:el-form-item的prop值需要和表单标签的v-model值保持一

Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】

本文实例讲述了Thinkphp5+plupload实现支持实时预览的图片上传功能.分享给大家供大家参考,具体如下: 今天和大家分享一个国外的图片上传插件,这个插件支持分片上传大文件.其中著名的七牛云平台的jssdk就使用了puupload插件,可见这个插件还是相当牛叉的. 这个插件不仅仅支持图片上传,还支持大多数文件的上传,例如视频文件,音频文件,word文件等等,而且大文件都采用分片上传的机制. Plupload有以下功能和特点: 1.拥有多种上传方式:HTML5.flash.silverli

thinkphp实现图片上传功能分享

1.我们首先需要创建一个表 复制代码 代码如下: CREATE TABLE IF NOT EXISTS `tp_image` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `image` varchar(200) NOT NULL,  `create_time` int(11) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8; 2.然后再conf文件里添加配置(最后一段配置