Taskmanagement之Servlet(一)文件上传下载

  Taskmanagement中需要用到附件的上传和下载,在网上找到了相应的资料,才完成这样的功能。

  1. 文件上传
  2. 文件下载


下面是两篇有关文件上传的资料,

http://xiaoduan.blog.51cto.com/502137/137909/

http://jiaguwen123.iteye.com/blog/705740

文件上传,我使用的是Apache Common FileUpload,使用到的jar包在上面的第一篇文章中有,如果不好下载,我等一下也上传一份,这样下载会比较方便.已经上传了(http://download.youkuaiyun.com/detail/sunnybuer/4936240)。直接上代码来的比较的经济实惠。

处理请求端,我是使用servlet的,

boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
	FileItemFactory factory = new DiskFileItemFactory();
	ServletFileUpload upload = new ServletFileUpload(factory);
	List<FileItem> items = upload.parseRequest(request);
	Iterator iterator = items.iterator();
	while (iterator.hasNext()) {
		FileItem item = (FileItem) iterator.next();

		if (!item.isFormField()) { //ignore the form element
			String fileName = item.getName();
			// TODO filesize int is it ok?
			int size = (int) item.getSize();
			String root = "";//Set the root
			File path = new File(root + "/uploads");
			if (!path.exists()) {
				boolean status = path.mkdirs();
			}
			
			item.write(uploadedFile); //write file to disk
		}
	}
}

首先我们会判断这个请求是不是一个文件上传的请求,如果是的话,我们才会进行下面的操作。这个是第一行和第二行代码的意思。

文件上传的发送请求端,我是使用jsp写的,

<form action="taskcontroller" method="post"  enctype="multipart/form-data">
		<label for="filename_1">File: </label>
        <input id="filename_1" type="file" name="filename_1" size="50"/><br/>
		<input type="submit" value="upload" name="command" />
</form>

在处理上传的过程中,我碰到了这样的一个问题:对于上传的这种请求,我不能从里面提取出我想要的除了文件之外的信息。例如,我想上传一个文件,另外我想附带这个文件的一些评论信息,这些评论信息是由用户填写的,但是对于文件上传这样的请求方式,我却不能从request获得用户填写的评论信息,或者是我们找到相应的api来获得这样的信息,如果有知道的,请告诉我,谢谢!我现在使用的方法是,单单上传文件后,再后服务器传回刚才上传文件的标识码,然后再进行写评论等其他的操作。


同理,这里也直接上代码,

response.reset();
		File file = new File(tempPath, fileName);
		if (file.exists()) {
			response.setContentType(contentType);
			response.addHeader("Content-Disposition", "attachment; filename=\""
					+ file.getName() + "\"");//注释1
			int fileLength = (int) file.length();
			response.setContentLength(fileLength);
			if (fileLength != 0) {
				InputStream in = new FileInputStream(file);
				byte[] buffer = new byte[4096];
				ServletOutputStream servletOS = response.getOutputStream();
				int readLength = -1;

				while ((readLength = in.read(buffer)) != -1) {
					servletOS.write(buffer, 0, readLength);
				}

				in.close();
				servletOS.flush();
				servletOS.close();
			}
		}

上面的代码就能支持文件的下载,很方便。这里顺便提一下,在上面代码中注释1的地方,这里我们的file.getName()我们可以替换成这个文件上传是的名字,这样用户体验会好一点。你们觉得呢?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值