myeclipse中建web项目上传文件到hadoop,出现文件上传上去了,但是文件大小为0或小于当前文件解决方案,


request.setCharacterEncoding("UTF-8");
Long start = System.currentTimeMillis();
try {
if (ServletFileUpload.isMultipartContent(request)) {
DiskFileItemFactory dff = new DiskFileItemFactory();// 创建该对象
dff.setRepository(tmpDir);// 指定上传文件的临时目录
dff.setSizeThreshold(1024000);// 指定在内存中缓存数据大小,单位为byte
ServletFileUpload sfu = new ServletFileUpload(dff);// 创建该对象


// sfu.setFileSizeMax(5000000);// 指定单个上传文件的最大尺寸
// sfu.setSizeMax(10000000);// 指定一次上传多个文件的总尺寸
FileItemIterator fii = sfu.getItemIterator(request);// 解析request
// 请求,并返回FileItemIterator集合
while (fii.hasNext()) {
FileItemStream fis = fii.next();// 从集合中获得一个文件流
if (!fis.isFormField() && fis.getName().length() > 0) {// 过滤掉表单中非文件域
System.out.println("ok:" + fis.getName());
/*String fileName = ReplaceBadCharOfFileName(fis
.getName());*/
String fileName = fis
.getName();
System.out.println(fileName);
BufferedInputStream in = new BufferedInputStream(
fis.openStream());// 获得文件输入流
String dst = "hdfs://192.168.0.16:9000/" + fileName;

Configuration conf = new Configuration();
// 获得hadoop系统的连接
FileSystem fs = FileSystem.get(URI.create(dst), conf);
// out对应的是Hadoop文件系统中的目录
OutputStream out = fs.create(new Path(dst));
IOUtils.copyBytes(in, out, 4096, false);// 4096是4k字节
out.flush();
out.close();
fs.close();
System.out.println("success");
System.out.println(System.currentTimeMillis() - start);
}
}
response.getWriter().println("File upload successfully!!!");// 终于成功了,还不到你的上传文件中看看,你要的东西都到齐了吗
}
} catch (Exception e) {
e.printStackTrace();

}

一开始没有添加out.flush();out.close();fs.close();故导致了上面的情况

相关内容