java web 断点续传文件 以及 获取文件的SHA-1散列值
2013-09-29 14:44
357 查看
package com.linvan.front; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.util.RandomAccess; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import com.linvan.util.TransUtil; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private File file;// 上传的文件 private String fileFileName;// 上传的文件名 private String fileContentType;// 上传的文件类型 public String toUpload() { return SUCCESS; } /** * 上传文件 * * @return */ public String upload() { if (!ServletActionContext.getRequest().getMethod().equals("POST")) { return INPUT; } System.out.println(TransUtil.getSha1(file)); String realPath = ServletActionContext.getServletContext().getRealPath( "/upload"); if (file != null) { File saveFile = new File(new File(realPath), fileFileName); if (!saveFile.getParentFile().exists()) { saveFile.getParentFile().mkdirs(); } // 如果文件已经存在,则开始续传 if (saveFile.exists()) { // 先获得已经保存的文件大小 long size = saveFile.length(); RandomAccessFile oSavedFile;//用它来保存文件 try { oSavedFile = new RandomAccessFile(saveFile, "rw");//保存的文件:saveFile InputStream in = new FileInputStream(file);//输入流 try { oSavedFile.seek(size);//跳过size长度开始保存文件 byte[] b = new byte[1024]; int nRead; in.skip(size);//跳过size长度开始输出文件file while ((nRead = in.read(b, 0, 1024)) > 0) { oSavedFile.write(b, 0, nRead); } System.out.println(TransUtil.getSha1(saveFile));//输出saveFile的sha-1散列值 } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } } else { try { FileUtils.copyFile(file, saveFile); System.out.println(TransUtil.getSha1(saveFile)); } catch (IOException e) { e.printStackTrace(); System.out.println("上传文件失败"); } } } return SUCCESS; } public File getFile() { return file; } public void setFile(File file) { this.file = file; } public String getFileFileName() { return fileFileName; } public void setFileFileName(String fileFileName) { this.fileFileName = fileFileName; } public String getFileContentType() { return fileContentType; } public void setFileContentType(String fileContentType) { this.fileContentType = fileContentType; } }
上面是上传文件的Action,支持断点续传
获取文件SHA-1 散列值 方法: [code=java]public static String getSha1(File file) { try { MessageDigest messagedigest = MessageDigest.getInstance("sha-1"); int len = 0; byte[] buffer = new byte[1024 * 1024 * 10]; try { FileInputStream in = new FileInputStream(file); while ((len = in.read(buffer)) >0) { //该对象通过使用 update()方法处理数据 messagedigest.update(buffer, 0, len); } in.close(); byte[] hash = messagedigest.digest(); return bytesToHexString(hash); } catch (IOException e) { e.printStackTrace(); return null; } } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } }
相关文章推荐
- 利用JAVA获取远程文件及断点续传
- Java Web 文件下载之断点续传
- java断点续传功能实例(java获取远程文件)
- java获取WEB-INF目录下的文件
- 【javaweb】Session原理以及浏览器禁止Cookie之后服务器如何获取Session
- Java在WEB项目中获取文件路径
- java getResourcesAsStream()如何获取WEB-INF下的文件流
- 断点续传、大文件上传、秒传、webuploader
- Java在WEB项目中获取文件路径
- Java获取Web服务器文件
- 关于web工程中java类如何获取webapp路径下的文件
- javaweb登录页面验证码验证以及session中验证码值获取不同步的问题
- java语言反射的概述以及三种获取字节码文件对应的Class类型的对象的方式
- Java Web应用下载文件以及下…
- (二)使用libcurl实现获取目标文件大小, 下载进度显示, 断点续传等功能
- java 断点续传文件到远程服务器
- Java多线程下载框架01:多线程的好处以及断点续传原理
- JavaWeb中获取资源文件路径
- Java Web 学习笔记之一:服务器获取表单上传的文件
- java http大文件上传,断点续传项目研究,Github上传源代码