jsp中用fileupload组件上传文件遇到的问题

之前做了参考网上fileupload组件写了一个文件上传下载的简易系统,其中遇到一些问题,在这里作一些记录:

1.关于文件的存放位置

可根据文件的类型或者所属的项目分开存放,用mkdirs方法即可,

File dirFile = new File(filepath);
                    if(!(dirFile.exists()) && !(dirFile.isDirectory())){
                    	dirFile.mkdirs();
                    }


2.关于文件重命名,此处我采用了原名+年月日+序号+后缀来命名,这样的话比较方便管理,也便于直接查看其上传日期,

public class FileRename {
	public String getNewFileName(String originalFileName, String middleName, String filepath) {

		StringBuffer newFileName = new StringBuffer();
		if (null != originalFileName && !"".equals(originalFileName)) {
			int no = 1;
			int port = originalFileName.lastIndexOf(".");
			String type = "";
			String fileName = "";
			if (port != -1) {
				type = originalFileName.substring(port + 1);
			}
			fileName = middleName;
			JsonDateValueProcessor jdvp = new JsonDateValueProcessor();
			JsonConfig jc = new JsonConfig();
			StringBuffer suffix = new StringBuffer("");
			suffix.append(jdvp.processArrayValue(new Date(), jc));
			do {
				newFileName.delete(0, newFileName.length());
				newFileName.append(fileName);
				newFileName.append(suffix);
				newFileName.append("-");
				if (no < 10) {
					newFileName.append("000" + String.valueOf(no));
				} else if (no < 100) {
					newFileName.append("00" + String.valueOf(no));
				} else if (no < 1000) {
					newFileName.append("0" + String.valueOf(no));
				}
				
				newFileName.append(".");
				newFileName.append(type);
				no++;
			} while (new File(filepath + "\\" + newFileName).exists());
		}
		return newFileName.toString();
	}
}

直接调用这个类方法即可实现重命名

3.多文件上传:

if (item.isFormField()) {
//do something
}else{
//fileupload
}
这样便可轻松实现多文件上传

4.时间监控进度

采用progresslistener监听上传进度,界面settimeout即可实时获取上传进度,这部分界面就暂且使用文字描述了(%)

public class MyProgressListener implements ProgressListener{
	private HttpSession session;
	private FileUploadStatus fileuploadstatus;
	public MyProgressListener(HttpServletRequest request){
		session = request.getSession();
	}
	public void update(long pBytesRead,long pContentLength,int pItems){
		System.out.println("Listener is been used");
		fileuploadstatus = (FileUploadStatus) (session.getAttribute("fileUploadStatus") 
				== null ? new FileUploadStatus() : session.getAttribute("fileUploadStatus"));
		fileuploadstatus.setpBytesRead(pBytesRead);
		fileuploadstatus.setpContentLength(pContentLength);
		fileuploadstatus.setpItems(pItems);
		
		session.setAttribute("fileUploadStatus", fileuploadstatus);
	}
}

5.关于文件下载

只需找到文件路径,这里我设置的是上传的路径,因为上传直接可以下载,所以放在了一起

public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String filepath = new String(request.getParameter("filePath").getBytes("ISO-8859-1"),"UTF-8");
		System.out.println(filepath);
		String fileName = new String(request.getParameter("fileName").getBytes("ISO-8859-1"),"UTF-8");
		System.out.println(fileName);
		FileInputStream fis = new FileInputStream(new File(filepath + "\\" + fileName));
		System.out.println("Client type:" + request.getHeader("User-Agent"));
		if(request.getHeader("User-Agent").contains("MSIE")){
			response.addHeader("content-disposition", "attachment;filename=" +
					java.net.URLEncoder.encode(fileName,"UTF-8"));
		}else{
			response.addHeader("content-disposition", "attachment;filename=" +
					request.getParameter("fileName"));
		}
		ServletOutputStream sos = response.getOutputStream();
		int count = 0;
		byte[] bytes = new byte[1024];
		while((count = fis.read(bytes)) != -1){
			sos.write(bytes, 0, count);
		}
		sos.flush();
		sos.close();
	}

这样便可实现对指定文件的下载

6.文本域和文件域的区分

和多文件上传一样判断,对应获取输入框的值即可.

至此文件上传下载的基本功能算是完成了接下来准备继续完善此系统,比如说加上一个断点续传.尽量完善吧.

在此感谢网上大牛们,这次功能很多都是从网上找的资料实现的.thanks.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值