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

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 sha-1