`

多附件上传

    博客分类:
  • js
阅读更多
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
    <base href="<%=basePath%>"> 
    
    <title>My JSP 'upload.jsp' starting page</title> 
    
    <script type="text/javascript"> 
        function AddMore(){ 
            var more = document.getElementById("file"); 
            var br = document.createElement("br"); 
            var input = document.createElement("input"); 
            var button = document.createElement("input"); 
            
            input.type = "file"; 
            input.name = "file"; 
            
            button.type = "button"; 
            button.value = "删除"; 
            
            more.appendChild(br); 
            more.appendChild(input); 
            more.appendChild(button); 
            
            button.onclick = function(){ 
                more.removeChild(br); 
                more.removeChild(input); 
                more.removeChild(button); 
            }; 
        } 
    </script> 
</head> 

<body> 
    <s:form action="upload" method="post" theme="simple" enctype="multipart/form-data"> 
    <table border="1" width="50%"> 
        <tr> 
            <td>用户名:</td> 
            <td><s:textfield name="username" label="用户名"></s:textfield></td> 
        </tr> 
        <tr> 
            <td>附件:</td> 
            <td id="file"> 
            <s:file name="file" label="文件"></s:file> 
            <input type="button" value="增加附件" onclick="AddMore()"> 
            </td> 
        </tr> 
        <tr> 
            <td colspan="2" align="center"> 
            <s:submit value="提交" ></s:submit></td> 
        </tr> 
    </table>    
    </s:form> 
</body> 
</html>

 编辑页面遍历显示  :

<c:forEach var="i" items="${oaAnnexs}" >
				<a href="<%=url%>${i.filePath }">${i.fileName}</a><input type="hidden"  value="${i.id }"/> <input type="button" value="删除" onclick="delFile('${i.id }')"/> <br>
	 		</c:forEach>

 

 

底层代码:

package com.sinosoft.oa.base.service.impl;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

/**
 * 
 * @author bmj
 * @date 2014-4-30
 */
public class FileOperateUtil {
	private static final String REALNAME = "realName";
	private static final String STORENAME = "storeName";
	private static final String SIZE = "size";
	private static final String SUFFIX = "suffix";
	private static final String CONTENTTYPE = "contentType";
	private static final String CREATETIME = "createTime";
	private static final String UPLOADDIR = "uploadDir/";

	/**
	 * 将上传的文件进行重命名
	 * 
	 * @author lds
	 * @date 2014-4-30
	 * @param name
	 * @return
	 */
	private static String rename(String name) {

		Long now = Long.parseLong(new SimpleDateFormat("yyyyMMddHHmmss")
				.format(new Date()));
		Long random = (long) (Math.random() * now);
		String fileName = now + "" + random;

		if (name.indexOf(".") != -1) {
			fileName += name.substring(name.lastIndexOf("."));
		}

		return fileName;
	}

	/**
	 * 上传文件
	 * 
	 * @author lds
	 * @date 2014-4-30
	 * @param request
	 * @param params
	 * @param values
	 * @return
	 * @throws Exception
	 */
	public static List<Map<String, Object>> upload(HttpServletRequest request,
			String[] params, Map<String, Object[]> values) throws Exception {

		List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();

		MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
		Map<String, MultipartFile> fileMap = mRequest.getFileMap();

		String uploadDir = request.getSession().getServletContext()
				.getRealPath("/")
				+ FileOperateUtil.UPLOADDIR;
		File file = new File(uploadDir);

		if (!file.exists()) {
			file.mkdir();
		}

		String fileName = null;
		int i = 0;
		for (Iterator<Map.Entry<String, MultipartFile>> it = fileMap.entrySet()
				.iterator(); it.hasNext(); i++) {

			Map.Entry<String, MultipartFile> entry = it.next();
			MultipartFile mFile = entry.getValue();

			fileName = mFile.getOriginalFilename();

			String storeName = rename(fileName);
			//fileName去掉后缀
			if(!StringUtils.isBlank(fileName)){
				fileName = fileName.substring(0,fileName.lastIndexOf("."));
			}
			File file2 = new File(uploadDir+storeName);
			//上传
			FileCopyUtils.copy(mFile.getBytes(), file2);	
			Map<String, Object> map = new HashMap<String, Object>();
			map.put(mFile.getOriginalFilename(), storeName);
			result.add(map);
			
		}
		return result;
	}

	/**
	 * 下载
	 * 
	 * @author lds
	 * @date 2014-4-30 
	 * @param request
	 * @param response
	 * @param storeName
	 * @param contentType
	 * @param realName
	 * @throws Exception
	 */
	public static void download(HttpServletRequest request,
			HttpServletResponse response, String storeName, String contentType,
			String realName) throws Exception {
		response.setContentType("text/html;charset=UTF-8");
		request.setCharacterEncoding("UTF-8");
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;

		String ctxPath = request.getSession().getServletContext()
				.getRealPath("/")
				+ FileOperateUtil.UPLOADDIR;
		String downLoadPath = ctxPath + storeName;

		long fileLength = new File(downLoadPath).length();

		response.setContentType(contentType);
		response.setHeader("Content-disposition", "attachment; filename="
				+ new String(realName.getBytes("utf-8"), "ISO8859-1"));
		response.setHeader("Content-Length", String.valueOf(fileLength));

		bis = new BufferedInputStream(new FileInputStream(downLoadPath));
		bos = new BufferedOutputStream(response.getOutputStream());
		byte[] buff = new byte[2048];
		int bytesRead;
		while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
			bos.write(buff, 0, bytesRead);
		}
		bis.close();
		bos.close();
	}
}

 

分享到:
评论

相关推荐

    jquery实现多附件上传

    "jquery实现多附件上传"这个主题涉及到的是利用jQuery来创建一个功能,允许用户在网页上选择并上传多个文件。这在现代网页应用中是非常常见的需求,比如论坛、社交媒体或者在线协作平台。 在jQuery中实现多附件上传...

    多附件上传MultiUpload

    在IT领域,多附件上传(MultiUpload)是一种常见的功能,特别是在网页应用中,它允许用户同时上传多个文件,极大地提高了用户交互的效率。本示例是关于如何利用Ajax技术实现多附件上传的一个Demo,让我们深入探讨...

    c#多附件上传源代码

    在C#编程中,多附件上传是一项常见的功能,特别是在Web应用程序和桌面应用中,例如电子邮件系统、文件分享平台或者在线协作工具。这个标题"多附件上传源代码"指的是一个实现该功能的C#代码示例,非常适合初学者学习...

    一款基于JavaScript实现的多附件上传表单添加类库源码及例子程序

    在IT行业中,多附件上传是Web应用中常见的一项功能,特别是在文档管理、社交媒体以及协作平台等领域。本资源提供了一款基于JavaScript实现的多附件上传表单添加类库的源码和示例程序,这对于开发者来说是一个很好的...

    JQ多附件上传

    "JQ多附件上传"是一种基于JQuery的插件技术,它解决了用户一次性上传多个文件的需求,大大提升了用户体验。JQuery是JavaScript的一个库,以其简洁的API和丰富的功能而广受欢迎,它简化了DOM操作、事件处理以及Ajax...

    SWFUpload多附件上传控件DEMO

    在网页设计中,传统的单个文件上传方式往往限制了用户的选择,而SWFUpload的多文件选择特性解决了这一问题,使得用户能够在一次操作中上传多个文件,例如图片、文档或音频文件。 该控件的一大亮点是它提供了上传...

    javascript多附件上传

    JavaScript多附件上传是一种常见的Web开发功能,用于在网页上实现用户选择并上传多个文件。这一技术主要基于HTML5中的File API,它允许开发者在浏览器端处理文件,包括读取、写入和上传。本文将详细讲解JavaScript...

    Domino平台多附件上传的设计与实现

    在协同办公环境中,多附件上传功能是提升效率和便利性的重要特性。本文将详细解析如何在Domino平台中设计并实现这一功能。Domino是由IBM开发的企业级协作平台,其核心是Lotus Notes,它提供了丰富的协作工具和数据库...

    javascript 静态 多附件上传

    在JavaScript的世界里,静态多附件上传是一个常见的需求,特别是在网页应用中。这个需求涉及到前端的交互设计、数据处理以及与服务器的通信。下面我们将详细探讨这个主题。 首先,"静态"在这里指的是没有依赖服务器...

    JSP多附件上传系统

    【JSP多附件上传系统】是一个基于Java JSP技术实现的Web应用,旨在提供一个能够支持用户上传多个文件的功能。在传统的Web开发中,单个文件上传是常见的操作,但随着互联网应用的发展,多文件上传的需求越来越普遍,...

    C#WEB上传控件,多附件上传

    总的来说,这个C# Web上传控件提供了一种方便的方式来实现多附件上传,使得开发者能够快速地在自己的Web应用中集成这一功能。尽管压缩包中没有包含完整的项目,但通过理解源代码和适当调整,你可以根据自己的项目...

    layui多附件上传.rar

    本资源“layui多附件上传.rar”是基于layui实现的多文件上传功能的示例代码,它提供了完整的新增、修改和删除操作,并且经过了测试,确保了功能的稳定性。 1. layui基础知识: layui是一款遵循MIT协议的前端UI框架...

    多附件上传效果jsshangchuang

    多附件上传效果js多附件上传效果js多附件上传效果js

    多附件上传demo.zip

    在IT行业中,多附件上传是一项常见的功能,尤其在企业级应用和协作平台中。这个"多附件上传demo.zip"提供了一个简单的多附件上传案例,它适用于开发者在进行类似功能开发时参考。本案例主要涉及的技术栈是Struts,这...

    Lotus domino BS 多附件上传例子 Lotus domino jquery附件上传 domino上传附件不刷新界面

    多附件上传允许用户一次选择并上传多个文件,这在许多业务场景中非常实用。在jQuery中,可以通过`multiple`属性设置HTML的`&lt;input type="file"&gt;`元素,使其支持多选。然后通过循环遍历选取的文件,逐个发送到服务器...

    多附件上传 代码

    多附件上传是指允许用户一次性选择并上传多个文件的功能。这一功能不仅能够提升用户体验,还能提高工作效率。为了实现这一功能,开发者需要掌握多种技术和方法,包括前端文件选择控件的设计、后端文件处理逻辑的编写...

    asp.net多附件上传实例代码

    在ASP.NET中,多附件上传是一项常见的功能,它允许用户一次性上传多个文件,例如图片、文档或其他类型的文件。本实例代码旨在提供一个详尽的解决方案,涵盖了多种不同的实现方法。以下将详细介绍这些方法及其关键...

    ASP.NET 多附件上传实现代码

    ***实现多附件上传的代码涉及到前端JavaScript以及后端的***处理技术,能够实现在网页上动态地添加多个文件上传控件,允许用户上传多个文件。这种实现方式在功能上类似于常见的邮件系统或网盘服务中的多文件上传功能...

Global site tag (gtag.js) - Google Analytics