java web 断点续传文件 以及 获取文件的SHA-1散列值

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 散列值 方法:
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)