文件上传时用户中断传输,后台如果删除已接收一部分的文件

风软 发布于 2014/07/10 16:36
阅读 1K+
收藏 0

@JFinal 你好,想跟你请教个问题:

文件上传时客户端使用swfupload 组件,已可以正常上传到后台,但是有一个问题,如果在上传一半的时候,点取消上传,服务器如何删除已接收一部分的文件?


public void upload() {
		String flag = getPara("saveDataId");
		if (null != flag) {
			HttpServletRequest request = getRequest();
			String mHttpUrl = request.getRealPath("") + separator
					+ "uploadFiles" + separator;
			UploadFile uf = null;
			int maxSize = 1000 * 1024 * 1024; // 10M
			try {
				uf = getFile("FILE", mHttpUrl, maxSize, "utf-8");
				File f = uf.getFile();
				f.renameTo(new File(mHttpUrl + System.currentTimeMillis() + "." + "dat"));
			} catch (Exception e) {
				//中断后会出现 Caused by: java.io.IOException: unexpected end of part 异常,
				//我想在这里把已接收一部分的文件删除,但是 uf 是null 
				e.printStackTrace();
				if (uf != null)
				{
					uf.getFile().delete();
				}
			}
		}
		render("upload.html");
	}



加载中
0
台俊峰
台俊峰
swfupload的进度代表请求发送的进度,中途取消,请求会取消,也就是说等于没有发送请求,不会有存了一半的文件。
0
风软
风软

引用来自“台俊峰”的评论

swfupload的进度代表请求发送的进度,中途取消,请求会取消,也就是说等于没有发送请求,不会有存了一半的文件。
我有测试过, 上传一个比较大的文件,中途取消了,后台会保存一个接收了不完全的文件。
0
JFinal
JFinal
这个在以前没有发现过类似的问题,难道与 swfupload 有关? 麻烦测试一下小文件上传是否也会有此问题,反馈给我
0
风软
风软

引用来自“JFinal”的评论

这个在以前没有发现过类似的问题,难道与 swfupload 有关? 麻烦测试一下小文件上传是否也会有此问题,反馈给我

你好,不管是大文件还是小文件,都是一样的问题, 跟踪到里面的代码jfinal 的MultipartRequest类中和第105行,调用创建cos实例的时候开始上传文件,估计时这里面就生成的,如果中断传输后 抛出 IOException 异常, 创建的文件无法删除。

另外

multipartRequest = new  com.oreilly.servlet.MultipartRequest(request, saveDirectory, maxPostSize, encoding, fileRenamePolicy);

fileRenamePolicy 这个参数没办法在外面传进来, 所以不能使用重命名的功能。只能传输完成后自己重写,不知道是否还有其它方法。

uf = getFile("FILE", mHttpUrl, maxSize, "utf-8");
File f = uf.getFile();
f.renameTo(new File(mHttpUrl + System.currentTimeMillis() + "." + "dat"));

返回顶部
顶部