您的位置:首页 > 编程语言 > Java开发

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

2015-03-24 14:43 676 查看
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();故导致了上面的情况
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐