论坛首页 Java企业应用论坛

我写的一个批量上传组件,可同时上传400个文件(附源代码)

浏览 33861 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (10)
作者 正文
   发表时间:2009-11-16  
兄弟,能否做开源或者打包成api共享啊,这样比较有意义哩
0 请登录后投票
   发表时间:2009-11-16  
能实现多线程上传吗?否则速度很慢!
0 请登录后投票
   发表时间:2009-11-16  
给的代码不全??
0 请登录后投票
   发表时间:2009-11-16  
logicgate 写道
晨星★~雨泪 写道
xiaoqulai 写道
曾经de迷茫 写道
xiaoqulai 写道
kjj 写道
代码就不能格式化一下吗,看着就烦

第一次发帖,直接从我的博客中copy过来的,格式不知道咋弄,可直接下载附件,里面有源代码


使用BBCode Code标签,像Java源码 :[ code="java"][/code ]


谢谢指点,为什么的我的博客上面没有这个BBCode code,需要什么插件吗?



狂汗....

瀑布汗,你发贴的时候没有看到"BBCode编辑器"吗?你点"code"按钮。再或者你直接用可视化编辑器。


大哥,我说的是我的博客,不是javaeye,我的博客用的是wordpress,好像没有javaeye这么强的文本编辑功能。
http://www.alanx.cn 大哥你去看看吧,顺便帮俺点点广告,在顺便告诉俺为什么我的分类目录无效,点击分类的时候,显示的是某篇文章,而不是该文类下面的文章列表
0 请登录后投票
   发表时间:2009-11-16  
JackAndroid 写道
给的代码不全??

我最鄙视这种行为了,兄弟别污蔑我呀。
0 请登录后投票
   发表时间:2009-11-16  
linliangyi2007 写道
兄弟,能否做开源或者打包成api共享啊,这样比较有意义哩

谢谢兄弟提醒,我的本意是供大家参考,因为这是我第一次用flash写代码,而且也是为公司工作服务的,所以能力有限,考虑不周全。不过我会按照兄弟说的封装一下,提供api。一有时间我就做这个事。
0 请登录后投票
   发表时间:2009-11-16  
flyingcai 写道
能实现多线程上传吗?否则速度很慢!

没有饿,兄弟,对flash不熟。不过速度还是很快的。
多线程也不是很好啊,对服务器的负担加重了吧。
0 请登录后投票
   发表时间:2009-11-17   最后修改:2009-11-17

package cn.com.ajaxbear.action;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class FileUploadCore {
	/**
	 * 批量上传文件
	 * 
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @throws Exception
	 */
	@SuppressWarnings("uncheck")
	public ActionForward fileBatchUpload(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		response.setCharacterEncoding("utf-8");
		request.setCharacterEncoding("utf-8");
		FMSSession session = BaseSession.getInstance().getBean(
				FMSSession.class, FMSUtil.getProperty("fms.provider.url"));
		FMSStaffVO fmsStaffVO = getStaffVO(request);
		PrintWriter pw = null;
		String fileName = null;
		String path = null;
		String realPath = null;
		int fileSize = 0;
		FMSFile fmsFile = null;
		try {
			FileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(factory);
			upload.setHeaderEncoding("utf-8");
			List items = null;
			items = upload.parseRequest(request);
			for (int i = 0; items != null && i < items.size(); i++) {
				FileItem item = (FileItem) items.get(i);
				if (item.getFieldName() != null
						&& item.getFieldName().equals("uploadFolderPath")) {
					path = new String(item.getString().getBytes("iso8859-1"),
							"utf-8");
				}
				System.out.println("—————————————————-");
				System.out
						.println("item.getFieldName()=" + item.getFieldName());
				System.out.println("item.getName()=" + item.getName());
				System.out.println("item.isFormField()=" + item.isFormField());
				System.out.println("item.isInMemory()=" + item.isInMemory());
				System.out.println("item.getContentType()="
						+ item.getContentType());
				System.out.println("—————————————————-");
			}
			pw = response.getWriter();
			if (path == null || path.equals("")) {
				pw.println("<B>路径不正确</B>");
				pw.flush();
				pw.close();
				return null;
			}
			for (int i = 0; items != null && i < items.size(); i++) {
				FileItem item = (FileItem) items.get(i);
				if (item.getFieldName() != null
						&& item.getFieldName().equals("Filedata")) {
					fileName = item.getName();
					realPath = FMSUtil.getProperty("root.path") + path;
					File folder = new File(realPath);
					System.out.println("folder.exists()=" + folder.exists());
					System.out.println(folder);
					if (folder.exists() && folder.isDirectory()) {
						File file = new File(realPath + "\\" + fileName);
						FileOutputStream os = new FileOutputStream(file);
						BufferedOutputStream bos = new BufferedOutputStream(os);
						BufferedInputStream bis = new BufferedInputStream(item
								.getInputStream());
						// copy file
						fileSize = org.apache.commons.io.IOUtils.copy(bis, bos);
						fmsFile = new FMSFile();
						fmsFile.setName(fileName);
						fmsFile.setPath(path);
						fmsFile.setSize(fileSize + "");
						fmsFile.setCreateBy(fmsStaffVO.getStaffId() + "");
						fmsFile.setCreateDate(session.getDate());
						fmsFile.setModifyBy(fmsFile.getCreateBy());
						fmsFile.setModifyDate(fmsFile.getCreateDate());

						Set<IDocumentAccess> das = new HashSet<IDocumentAccess>();
						FMSFileAccess da = new FMSFileAccess();
						da
								.setAccessUnitCategory(FMSFileAccess.ACCESS_UNIT_CATEGORY_STAFF);
						da.setAccessUnitId(fmsStaffVO.getStaffId() + "");
						Set<String> auths = new HashSet<String>();
						auths.add("5");
						da.setPurviewSet(auths);
						da.setFile(fmsFile);
						das.add(da);

						da = new FMSFileAccess();
						da
								.setAccessUnitCategory(FMSFileAccess.ACCESS_UNIT_CATEGORY_ROLE);
						da.setAccessUnitId("45");// public access
						auths = new HashSet<String>();
						auths.add("1");
						da.setPurviewSet(auths);
						da.setFile(fmsFile);
						das.add(da);
						session.saveDocsAccess(fmsFile, das);
						/*
						 * List<FMSDocument> fMSDocuments = new ArrayList<FMSDocument>();
						 * fMSDocuments.add(fmsFile);
						 * session.save(fMSDocuments);
						 */

						bis.close();
						bos.close();

						pw.println("<B>上传成功</B>");
						pw.flush();
						pw.close();
					} else {
						pw.println("<B>路径不存在</B>");
						pw.flush();
						pw.close();
						return null;
					}
				}

			}
			pw.println("<B>上传成功</B>");
			pw.flush();
			pw.close();
		} catch (Exception e) {
			if (pw != null) {
				pw.println("<B>文件上传失败</B>");
				pw.flush();
				pw.close();
			}
			// 删除文件
			if (realPath != null && fileName != null) {
				File file = new File(realPath + "\\" + fileName);
				if (file.exists()) {
					file.delete();
				}
			}
			// 删除数据库文件和权限
			session.deleteFmsDocumentByDocument(fmsFile, fmsStaffVO
					.getStaffId()
					+ "");
			return null;
		}
		return null;
	}
}



FMSSession是哪个包包里的?我用lcds的Jar里没有发现他的踪迹哇~!
0 请登录后投票
   发表时间:2009-11-17  
谢谢兄弟,你真是热心人。
FMSSession 无需理会的,因为它是我们项目中与业务相关的EJB接口,与接受上传文件的逻辑无关。
对不起大家,我太懒(太忙),没有去把这些不相关的东西去掉,给大家造成不便,请原谅,我会抽时间封装一下的。谢谢大家




andy_ghg 写道

package cn.com.ajaxbear.action;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class FileUploadCore {
	/**
	 * 批量上传文件
	 * 
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @throws Exception
	 */
	@SuppressWarnings("uncheck")
	public ActionForward fileBatchUpload(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		response.setCharacterEncoding("utf-8");
		request.setCharacterEncoding("utf-8");
		FMSSession session = BaseSession.getInstance().getBean(
				FMSSession.class, FMSUtil.getProperty("fms.provider.url"));
		FMSStaffVO fmsStaffVO = getStaffVO(request);
		PrintWriter pw = null;
		String fileName = null;
		String path = null;
		String realPath = null;
		int fileSize = 0;
		FMSFile fmsFile = null;
		try {
			FileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(factory);
			upload.setHeaderEncoding("utf-8");
			List items = null;
			items = upload.parseRequest(request);
			for (int i = 0; items != null && i < items.size(); i++) {
				FileItem item = (FileItem) items.get(i);
				if (item.getFieldName() != null
						&& item.getFieldName().equals("uploadFolderPath")) {
					path = new String(item.getString().getBytes("iso8859-1"),
							"utf-8");
				}
				System.out.println("—————————————————-");
				System.out
						.println("item.getFieldName()=" + item.getFieldName());
				System.out.println("item.getName()=" + item.getName());
				System.out.println("item.isFormField()=" + item.isFormField());
				System.out.println("item.isInMemory()=" + item.isInMemory());
				System.out.println("item.getContentType()="
						+ item.getContentType());
				System.out.println("—————————————————-");
			}
			pw = response.getWriter();
			if (path == null || path.equals("")) {
				pw.println("<B>路径不正确</B>");
				pw.flush();
				pw.close();
				return null;
			}
			for (int i = 0; items != null && i < items.size(); i++) {
				FileItem item = (FileItem) items.get(i);
				if (item.getFieldName() != null
						&& item.getFieldName().equals("Filedata")) {
					fileName = item.getName();
					realPath = FMSUtil.getProperty("root.path") + path;
					File folder = new File(realPath);
					System.out.println("folder.exists()=" + folder.exists());
					System.out.println(folder);
					if (folder.exists() && folder.isDirectory()) {
						File file = new File(realPath + "\\" + fileName);
						FileOutputStream os = new FileOutputStream(file);
						BufferedOutputStream bos = new BufferedOutputStream(os);
						BufferedInputStream bis = new BufferedInputStream(item
								.getInputStream());
						// copy file
						fileSize = org.apache.commons.io.IOUtils.copy(bis, bos);
						fmsFile = new FMSFile();
						fmsFile.setName(fileName);
						fmsFile.setPath(path);
						fmsFile.setSize(fileSize + "");
						fmsFile.setCreateBy(fmsStaffVO.getStaffId() + "");
						fmsFile.setCreateDate(session.getDate());
						fmsFile.setModifyBy(fmsFile.getCreateBy());
						fmsFile.setModifyDate(fmsFile.getCreateDate());

						Set<IDocumentAccess> das = new HashSet<IDocumentAccess>();
						FMSFileAccess da = new FMSFileAccess();
						da
								.setAccessUnitCategory(FMSFileAccess.ACCESS_UNIT_CATEGORY_STAFF);
						da.setAccessUnitId(fmsStaffVO.getStaffId() + "");
						Set<String> auths = new HashSet<String>();
						auths.add("5");
						da.setPurviewSet(auths);
						da.setFile(fmsFile);
						das.add(da);

						da = new FMSFileAccess();
						da
								.setAccessUnitCategory(FMSFileAccess.ACCESS_UNIT_CATEGORY_ROLE);
						da.setAccessUnitId("45");// public access
						auths = new HashSet<String>();
						auths.add("1");
						da.setPurviewSet(auths);
						da.setFile(fmsFile);
						das.add(da);
						session.saveDocsAccess(fmsFile, das);
						/*
						 * List<FMSDocument> fMSDocuments = new ArrayList<FMSDocument>();
						 * fMSDocuments.add(fmsFile);
						 * session.save(fMSDocuments);
						 */

						bis.close();
						bos.close();

						pw.println("<B>上传成功</B>");
						pw.flush();
						pw.close();
					} else {
						pw.println("<B>路径不存在</B>");
						pw.flush();
						pw.close();
						return null;
					}
				}

			}
			pw.println("<B>上传成功</B>");
			pw.flush();
			pw.close();
		} catch (Exception e) {
			if (pw != null) {
				pw.println("<B>文件上传失败</B>");
				pw.flush();
				pw.close();
			}
			// 删除文件
			if (realPath != null && fileName != null) {
				File file = new File(realPath + "\\" + fileName);
				if (file.exists()) {
					file.delete();
				}
			}
			// 删除数据库文件和权限
			session.deleteFmsDocumentByDocument(fmsFile, fmsStaffVO
					.getStaffId()
					+ "");
			return null;
		}
		return null;
	}
}



FMSSession是哪个包包里的?我用lcds的Jar里没有发现他的踪迹哇~!

0 请登录后投票
   发表时间:2009-11-17  
andy_ghg 写道

FMSSession是哪个包包里的?我用lcds的Jar里没有发现他的踪迹哇~!


看你的意思,你的上传客户端是用的flex啊,其实这个东东比flash好。你先的问题是不是不明白如何用java程序接收上传过来的数据呢? 其实如果初次接触,用的是struts1.2,还真的容易接受不到正确的数据,另外还有中文名乱码的问题等等。具体原因上文已经阐述过,希望能帮到你
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics