`

单文件上传

 
阅读更多
Action操作类



public class Action extends BaseAction{
	// 附件信息
	private File iconFilepath; // 文件对像
	private String iconFilepathFileName; // 文件名
	private String iconFilepathContentType; // 文件的minitype

	
	/**
	 * 保存
	 *
	 * @return
	 */
	public String save() {
		if (log.isDebugEnabled()) {
			log.debug("上传的文件名为:" + this.iconFilepathFileName);
			log.debug("上传的文件minitype为:" + this.iconFilepathContentType);
		}
		try {
			String attachemnt = "";
			if (StringUtils.isNotBlank(iconFilepathFileName)) {
				// 上传新附件
				attachemnt = this.uploadClientAttach();
			}

			if (log.isDebugEnabled()) {
				log.debug("附件上传后保存的服务器端相对路径为:" + attachemnt);
			}
			if (StringUtils.isNotBlank(attachemnt)) {
                             //Action操作
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return SUCCESS;
	}

	
	/**
	 * 上传图片
	 * 
	 * @return
	 * @throws IOException
	 * @throws CallerException
	 */
	private String uploadClientAttach() throws IOException {
		String filePath = "upload/temp";
		String serviceFilePath = FileUtil.uploadFile(iconFilepath, iconFilepathFileName, filePath);
		return serviceFilePath;
	}

	
	public File getIconFilepath() {
		return iconFilepath;
	}

	public void setIconFilepath(File iconFilepath) {
		this.iconFilepath = iconFilepath;
	}

	public String getIconFilepathFileName() {
		return iconFilepathFileName;
	}

	public void setIconFilepathFileName(String iconFilepathFileName) {
		this.iconFilepathFileName = iconFilepathFileName;
	}

	public String getIconFilepathContentType() {
		return iconFilepathContentType;
	}

	public void setIconFilepathContentType(String iconFilepathContentType) {
		this.iconFilepathContentType = iconFilepathContentType;
	}
}

Jsp页面
<form id="adForm" name="adForm" action="save.do" method="post" enctype="multipart/form-data">
					<tr>
						<th width="20%"><span class="cRed">*</span>图片:</th>
						<td colspan="3">
							<input type="file" id="iconFilepath" name="iconFilepath" /><span id="tip" class="cRed"></span>
							<s:if test="iconPath != ''&&iconPath != null">
								<br/><img alt="图片预览" src="<s:url value='/'/><s:property value='iconPath'/>" width="500px">
							</s:if>
						</td>
					</tr>
					
				</tbody>
			</table>
		</form>

文件操作工具类
package cn.site.framework.util.file;

import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.ServletActionContext;

import cn.etuo.site.framework.exception.HackathonException;
import cn.etuo.site.framework.util.ConfigManager;
import cn.etuo.site.framework.util.Constants;
import cn.etuo.site.framework.util.DateUtil;
import cn.etuo.site.framework.util.RespType;

/**
 * 
 * 文件操作工具类
 * <p/>
 * 
 * @author [url=mailto:holin@huijisoft.com]Holin Ding[/url]
 * @version Date: 2012-12-5 上午11:04:33
 * @serial 1.0
 * @since 2012-12-5 上午11:04:33
 */
public class FileUtil {
	/**
	 * 返回文件的高度和宽度
	 * 
	 * @param file
	 *            要计算宽高的文件
	 * @return
	 * @throws IOException
	 */
	public static Map<String, Integer> getImageHAndW(File file) throws IOException {
		Map<String, Integer> map = new HashMap();
		BufferedImage bi = javax.imageio.ImageIO.read(file);
		int flag = 0;
		if (bi != null) {
			flag = 1;
			map.put("width", bi.getWidth());
			map.put("height", bi.getHeight());
		} else {
			flag = 2;
		}
		map.put("flag", flag);
		return map;
	}

	/**
	 * 验证文件的长宽是否符合要求
	 * 
	 * @param map
	 *            调用FileUtil.getImageHAndW()方法返回的map
	 * @param width
	 *            宽度限制
	 * @param height
	 *            高度限制
	 * @param type
	 *            验证类型 0:图片的长宽 是否等于传过来的长宽 ;1:图片的长宽在传过来的长宽范围内
	 * @return 1:不符合要求 2:符合要求
	 */
	public static int checkImageHAndW(Map<String, Integer> map, int width, int height, int type) {
		int returnValue = 0;
		int flag = map.get("flag");
		int imageWidth = map.get("width");
		int imageHeight = map.get("height");
		if (type == 0) {
			if (imageWidth == width && imageHeight == height) {
				returnValue = 2;
			} else {
				returnValue = 1;
			}
		} else if (type == 1) {
			if (imageWidth <= width && width <= height) {
				returnValue = 2;
			} else {
				returnValue = 1;
			}
		}
		return returnValue;
	}

	/**
	 * 检查文件的后缀名是否符合要求
	 * 
	 * @param fileName
	 *            要检查的文件
	 * @param types
	 *            符合要求的后缀:例:jpg,png,gif
	 * @return 符合要求:true;不符合要求:false;
	 */
	public static boolean checkFileType(String fileName, String types) {
		String name = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
		name = name.toLowerCase();
		types = types.toLowerCase();
		if (types.contains(name)) {
			return true;
		}
		return false;
	}

	/**
	 * 在工程目录下创建文件夹
	 * 
	 * @param fileFolderName
	 *            文件夹名称
	 * @return
	 */
	public static File creatFolder(String fileFolderName) {
		// 定义保存的路径,取当前项目的绝对路径
		String savepath = ServletActionContext.getServletContext().getRealPath("/");
		// 根据路径创建文件路径对象
		File file = new File(savepath + "/" + fileFolderName);
		if (!file.exists()) {
			file.mkdirs();
		}
		return file;
	}

	/**
	 * 上传文件操作,
	 * 
	 * @param file
	 *            要上传的文件
	 * @param fileName
	 *            上传的文件的文件名
	 * @param filePath
	 *            上传到服务器的位置
	 * @return 上传后的文件在服务器中保存的相对路径
	 * @throws IOException
	 */
	public static String uploadFile(File file, String fileName, String filePath) throws IOException {
		// 保存到服务器上的文件名
		String destFileName = "";
		// 保存到服务器上的路径及文件名
		String serviceFilePath = "";
		// 创建上传目标文件夹 按年月日格式生成文件夹
		String fileFolderName = filePath + "/" + DateUtil.getSeqDate();
		File folder = FileUtil.creatFolder(fileFolderName);
		if (file != null) {
			destFileName = FileUtil.uploadFile(folder, file, fileName, Constants.UPLOAD_FILE_NAME_TYPE_DATE);
			serviceFilePath = fileFolderName + "/" + destFileName;
		}
		return serviceFilePath;
	}

	/**
	 * 将file生成物理文件上传到指定的目录中
	 * 
	 * @param folder
	 *            文件要写的路径(调用FileUtil.creatFolder 方法得到的file对象)
	 * @param upload
	 *            要生成的物理文件
	 * @param uploadFileName
	 *            原文件名
	 * @param type
	 *            类型 1:用原文件名生成物理文件;2:用HHmmssSSS时间格式作为文件名生成物理文件(可扩展)
	 * @return 返回上传后的文件路径
	 * @throws IOException
	 */
	public static String uploadFile(File folder, File upload, String uploadFileName, int type) throws IOException {
		String fileName = "";
		switch (type) {
		case 1:
			fileName = uploadFileName;
			break;
		case 2:
			Date date = new Date();
			SimpleDateFormat df = new SimpleDateFormat("HHmmssSSS");

			fileName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1, uploadFileName.length());
			fileName = df.format(date) + "." + fileName;
			break;
		}

		File f = new File(folder, fileName);
		// 如果上传的文件是一个空文件,即0字节的文件,则创建一个空文件到磁盘中
		if (upload.length() <= 0) {
			f.createNewFile();
		} else {
			FileUtils.copyFile(upload, f);
		}
		return fileName;
	}

	/**
	 * 从文件服务器中删除指定的文件
	 * 
	 * @param fileName
	 *            要删除的文件名及路径的全称
	 * @return
	 * @throws IOException
	 */
	public static boolean deleteFile(String fileName) throws IOException {
		// 定义保存的路径,取当前项目的绝对路径
		String savepath = ServletActionContext.getServletContext().getRealPath("/");

		File file = new File(savepath + "/" + fileName);
		return file.delete();
	}

	/**
	 * 验证上传图片的分辨率是否符合要求
	 * 
	 * @param file
	 *            要验证的文件
	 * @param zooms
	 *            存放分辨率宽高的数组, zooms[0]:存放宽度 zooms[1]:存放高度
	 * @param type
	 *            是否支持等比缩放 0:支持等比缩放, 1:不支持等比缩放
	 * @return true可以上传、false 不可以上传
	 * @throws IOException
	 */
	public static boolean checkZoom(File file, String[] zooms, int type) throws IOException {
		Map<String, Integer> map = getImageHAndW(file);
		double imageWidth = map.get("width");
		double imageHeight = map.get("height");

		double zoomWidth = Integer.valueOf(zooms[0]);// 设置的宽
		double zoomHight = Integer.valueOf(zooms[1]);// 设置的高
		if (type == 0) {
			if ((imageWidth / imageHeight) == (zoomWidth / zoomHight)) {
				return true;
			} else {
				return false;
			}
		} else {
			int returnFlag = checkImageHAndW(map, (int) zoomWidth, (int) zoomHight, 0);
			if (returnFlag == 2) {
				return true;
			} else {
				return false;
			}
		}
	}

	/**
	 * 检查上传文件的大小
	 * 
	 * @param f
	 *            要上传的文件
	 * @param maxSize
	 *            文件大小上限,单位M
	 * @return 返回值true表示验证文件大小通过<br/>
	 *         返回值false表示验证文件大小不通过,或者File为null<br/>
	 */
	public static boolean checkFileMaxSize(File f, int maxSize) {
		boolean re = false;
		if (f == null) {
			return re;
		}
		long max = maxSize * 1048576; // 将maxSize转换成字节单位
		long fileSize = f.length(); // 获得文件大小
		if (fileSize > max) {
			re = false;
		} else {
			re = true;
		}
		/*
		 * try { FileInputStream fis = new FileInputStream(f); long fileSize =
		 * fis.available() / 1024;
		 * 
		 * } catch (IOException e) { e.printStackTrace(); }
		 */
		return re;
	}

	/**
	 * 删除单个文件
	 * 
	 * @param sPath
	 *            被删除文件的文件名
	 * @return 单个文件删除成功返回true,否则返回false
	 */
	public static boolean deleteFile2(String sPath) {
		boolean flag = false;

		return flag;
	}

	/**
	 * 删除目录(文件夹)以及目录下的文件
	 * 
	 * @param sPath
	 *            被删除目录的文件路径
	 * @return 目录删除成功返回true,否则返回false
	 */
	public static boolean deleteDirectory(String sPath) throws Exception {
		// 如果sPath不以文件分隔符结尾,自动添加文件分隔符
		if (!sPath.endsWith(File.separator)) {
			sPath = sPath + File.separator;
		}
		File dirFile = new File(sPath);
		// 如果dir对应的文件不存在,或者不是一个目录,则退出
		if (!dirFile.exists() || !dirFile.isDirectory()) {
			return false;
		}
		boolean flag = true;
		// 删除文件夹下的所有文件(包括子目录)
		File[] files = dirFile.listFiles();
		for (int i = 0; i < files.length; i++) {
			// 删除子文件
			if (files[i].isFile()) {
				File file = new File(files[i].getAbsolutePath());
				// 路径为文件且不为空则进行删除
				if (file.isFile() && file.exists()) {
					file.delete();
					flag = true;
				}
				if (!flag)
					break;
			} // 删除子目录
			else {
				flag = deleteDirectory(files[i].getAbsolutePath());
				if (!flag)
					break;
			}
		}
		if (!flag)
			return false;
		// 删除当前目录
		if (dirFile.delete()) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 读取文件内容
	 * 
	 * @param file
	 *            要读取的文件
	 * @return
	 * @throws FileNotFoundException
	 * @throws IOException
	 * @throws IOException
	 */
	public static String readFile(File file) {
		StringBuffer sb = new StringBuffer("");
		try {
			InputStreamReader fl = new InputStreamReader(new FileInputStream(file), "UTF-8");
			BufferedReader bf = new BufferedReader(fl);
			String context = null;
			do {
				context = bf.readLine();
				if (context == null) {
					break;
				} else if (!context.equals("")) {
					sb.append(context + "\n");
				}
			} while (context != null);
			bf.close();
		} catch (Exception e) {
			e.printStackTrace();
			return "";
		}
		return sb.toString();
	}

	/**
	 * <br>
	 * 拷贝文件
	 * 
	 * @param input
	 *            文件的原始路径
	 * @param output
	 *            文件的目的路径
	 * 
	 * @return boolean
	 * 
	 * @throws IOException
	 */
	public static boolean copy(String input, String output) throws Exception {
		File fromFile;
		File toFile;
		fromFile = new File(input);

		if (!fromFile.exists()) {
			return false;
		}
		toFile = new File(output);
		if (toFile.exists()) {
			return true;
		}

		FileInputStream fis = null;

		FileOutputStream fos = null;

		try {
			create(output);

			fis = new FileInputStream(fromFile);

			fos = new FileOutputStream(toFile);

			int bytesRead;

			byte[] buf = new byte[4 * 1024]; // 4K buffer

			while ((bytesRead = fis.read(buf)) != -1) {
				fos.write(buf, 0, bytesRead);
			}

			fos.flush();
		} catch (IOException e) {
			throw e;
		} finally {
			IOUtils.closeQuietly(fos);
			IOUtils.closeQuietly(fis);
		}

		return true;
	}

	/**
	 * <br>
	 * 创建新文件
	 * 
	 * @param name
	 *            需要创建的文件的全路径
	 * 
	 * @return boolean
	 */
	public static boolean create(String name) throws Exception {

		File f = new File(name);

		if (f.exists()) {
			return true;
		}

		String path = StringUtils.substringBeforeLast(name, File.separator);
		createDir(path);

		File file = new File(name);

		try {
			file.createNewFile();
		} catch (IOException e) {
			throw e;
		}
		return true;
	}

	/**
	 * <br>
	 * 创建目录
	 * 
	 * @param path
	 *            要创建目录的位置
	 * 
	 * <br>
	 *            如果文件已存在,则返回
	 * 
	 * @return boolean
	 */
	public static boolean createDir(String path) {
		File filepath = new File(path);
		if (!filepath.exists()) {
			return filepath.mkdirs();
		}
		return true;
	}
}
0
0
分享到:
评论

相关推荐

    基于SpringBoot的文件上传系统,前后端分离,单文件上传,多文件上传,大文件上传,断点续传,文件秒传,图片上传

    基于SpringBoot的文件上传系统,前后端分离,单文件上传,多文件上传,大文件上传,断点续传,文件秒传,图片上传 项目经过严格测试,确保可以运行! 采用前后端分离的方式进行开发,实现了几种常用的文件上传功能...

    .net单文件上传

    标题中的".net单文件上传"指的是使用.NET框架(特别是ASP.NET)进行的单一文件上传功能。在.NET中,实现这个功能通常涉及到Web表单、HTML控件和服务器端的代码处理。VS2005(Visual Studio 2005)是微软开发的一款...

    SpringMVC单文件上传、多文件上传、文件列表显示、文件下载

    本文将详细讲解如何实现SpringMVC中的单文件上传、多文件上传、文件列表显示以及文件下载。 首先,我们需要理解SpringMVC处理文件上传的基本原理。在SpringMVC中,文件上传通常涉及到`CommonsMultipartResolver`...

    asp.net实现单文件上传

    在ASP.NET中,单文件上传是一项常见的功能,用于允许用户通过网页将本地计算机上的单个文件上传到服务器。本文将详细讲解如何实现这一功能,并提供相关的源代码。 首先,我们需要在HTML页面上创建一个`&lt;input&gt;`标签...

    ASP.NET多文件上传,单文件上传,很好用【源代码】

    在这个主题中,我们将探讨ASP.NET中的文件上传功能,包括单文件上传和多文件上传,这在开发涉及用户交互并需要提交文件的Web应用时非常常见。源代码是由Visual Studio 2005编写的,这是一个强大的开发环境,支持ASP...

    C#单文件上传

    在本教程中,我们将探讨如何使用HTML控件实现单文件上传功能,并通过C#后端代码处理上传过程,同时实现类似AJAX的效果,使得文件上传无须页面刷新。 一、HTML控件与文件上传 在HTML中,`&lt;input&gt;`标签可以用来创建...

    SpringMVC单文件上传、多文件上传、文件列表显示、文件下载额

    本教程将深入探讨Spring MVC如何处理单文件上传、多文件上传、文件列表显示以及文件下载。以下是对这些知识点的详细说明: 1. **单文件上传**: 在Spring MVC中,单文件上传主要通过`@RequestParam("file") ...

    php-upload封装类上传文件,多单文件上传.zip

    本压缩包“php-upload封装类上传文件,多单文件上传.zip”提供了一个完整的PHP文件上传解决方案,包括单文件和多文件上传功能,并附带了演示示例。 核心知识点: 1. **PHP文件上传原理**:PHP通过`$_FILES`全局变量...

    element-ui+vue单文件上传和 多文件批量上传(多文件走一次接口).pdf

    本文将详细讲解如何使用Element UI与Vue.js实现单文件上传和多文件批量上传,且确保所有文件通过一个接口进行提交。 首先,我们需要安装Element UI库。在项目根目录下运行以下命令: ```bash npm install element-...

    兼容多个浏览器的单文件上传

    本项目"兼容多个浏览器的单文件上传"就是针对这个问题,提供了一种解决方案,确保在IE6、7、8这些低版本浏览器中也能实现类似现代浏览器的无刷新异步上传效果。 首先,我们来看文件上传的基本原理。在HTML中,`...

    android 文件上传(多个或单个),图片上传

    本文将深入探讨如何实现Android平台上的多文件和单文件上传,以及图片上传的实现细节。 ### 1. 文件上传基础 #### 1.1 获取文件 在Android中,用户可以选择文件,通常通过Intent的ACTION_PICK或者ACTION_GET_...

    phpcmsv9单文件上传功能_UTF8_phpcmsv9单文件上传功能_UTF8_piledqq_源码

    《PHPcmsV9单文件上传功能详解》 PHPcmsV9是一款基于PHP+MySQL开发的内容管理系统,它在网站建设和管理中提供了丰富的功能,其中单文件上传功能是其重要的组成部分之一。这一功能允许用户通过Web界面方便地上传各种...

    uniapp前端单文件上传JAVA后台接收实现(亲测)

    uniapp前端单文件上传JAVA后台接收实现(亲测),看了些文档,亲测了一天,后面还有多页面上传文档代码上传哦

    文件上传下载工具类单个文件上传多种形式下载文件

    文件上传下载工具类单个文件上传,多种传参形式下载文件

    单文件上传的C#源码

    单文件上传功能是网站常见的一种交互形式,允许用户将本地文件上传到服务器。本篇将详细讲解使用C#实现单文件上传的核心概念、步骤及关键代码。 1. **HTTP协议与文件上传** 文件上传基于HTTP协议的POST请求。在ASP...

    PHP多文件上传类,支持单个和多个文件上传

    首先,让我们了解一下文件上传的基本概念。在HTTP协议中,文件上传是通过POST请求来实现的,通常使用`multipart/form-data`编码类型。PHP提供了内置的全局数组`$_FILES`来接收上传的文件信息,包括文件名、临时存储...

    Java+Extjs实现单文件上传

    本话题主要关注如何使用Java后端和ExtJS前端框架来实现单文件上传的流程。下面将详细讲解这个过程涉及的关键知识点。 首先,我们来看Java文件上传。在Java中,处理文件上传主要依赖于Servlet API中的`Part`接口,这...

    spring boot多文件上传、单文件上传、Excel解析.rar

    在Spring Boot框架中,文件上传是一项常见的功能,无论是单文件上传还是多文件上传,都能方便地集成到项目中。Spring Boot提供了对MultipartFile接口的支持,使得处理文件上传变得简单易行。下面将详细介绍如何实现...

Global site tag (gtag.js) - Google Analytics