文件上传和下载

来源:互联网 发布:jquery源码分析 编辑:程序博客网 时间:2024/06/05 16:08
package com.huikao.dao.imp;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URLEncoder;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;


import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;


import com.huikao.dao.BaseDao;
import com.huikao.dao.ITestDao;
import com.huikao.domain.Test;
import com.huikao.util.DocConverter;
/**
 * 试卷类数据访问实现
 * @author LeiJing
 * @date 2014-11-8 18:51
 * @version v1.0
 *
 */
@Repository
public class TestDaoImp extends BaseDao implements ITestDao {


private static final String searchTests="com.huikao.dao.ITestDao.searchTests";//查找试卷
private static final String delete="com.huikao.dao.ITestDao.delete";//删除试卷
private static final String update="com.huikao.dao.ITestDao.update";//更新试卷全部信息
private static final String updateTest="com.huikao.dao.ITestDao.updateTest";//更新试卷的路径,上传试卷,大小
private static final String viewTestDetailes="com.huikao.dao.ITestDao.viewTestDetailes";//查看试卷详细内容
private static final String searchByDownloadTimes="com.huikao.dao.ITestDao.searchByDownloadTimes";//按照下载次数对试卷排序
private static final String insert="com.huikao.dao.ITestDao.insert";//上传试卷描述
private static final String selectBySrc="com.huikao.dao.ITestDao.selectBySrc";//根据路径查询试卷
//更新试卷下载次数


/**
* 按照下载排行查找试卷
*/
@Override
public List<Test> searchByDownloadTimes(int rows){


return super.sqlMapClientTemplate.queryForList(searchByDownloadTimes, rows);
}
/**
 * 搜索试卷
 */
@Override
public List<Test> searchTests(Test test) {
// TODO Auto-generated method stub


return super.sqlMapClientTemplate.queryForList(searchTests,test);


}
private RowMapper<Test> testRowMapper = new RowMapper<Test>() {


@Override
public Test mapRow(ResultSet rs, int rowNum) throws SQLException {
Test t = new Test();
t.setId(rs.getInt("id"));
t.setCookie_times(rs.getInt("cookie_times"));
t.setDesciption(rs.getString("desciption"));
t.setUpPeople(rs.getInt("upPeople"));
t.setDownloadTimes(rs.getInt("downloadTimes"));
t.setKeywords(rs.getString("keywords"));
t.setSchoolName(rs.getString("schoolName"));
t.setMajor(rs.getString("major"));
t.setTeacher(rs.getString("teacher"));
t.setTest_src(rs.getString("test_src"));
t.setTestDate(rs.getString("testDate"));
t.setTitle(rs.getString("title"));
t.setType(rs.getString("type"));
return null;
}


};
/**
* 文件真正上传处理
* @param test
* @param request
* @param response
* @return -1 失败 or id
*/
@Override
public String upload(Test test,HttpServletRequest request,
HttpServletResponse response){


String result = "file upload error";


// 创建 DiskFileItemFactory工厂 对象  
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();  
FileItem currentFile = null;
String uploadPath = request.getRealPath("/WEB-INF/upload"); // 上传文件的目录
String tempPath=request.getRealPath("/WEB-INF/temp"); // 临时文件目录


diskFileItemFactory.setRepository(new File(tempPath));// 设置缓冲区目录
diskFileItemFactory.setSizeThreshold(1024*1024);// 设置缓冲区大小,1M
// 创建DiskFileItemFactory的解析器对象  
ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory); 
List<FileItem> fileItems;
try{
fileItems = fileUpload.parseRequest(request);


for(FileItem fileItem : fileItems){//遍历文件列表


if(fileItem.isFormField()){//是普通文本域


}else{
String fileName = fileItem.getName();
if(fileName.lastIndexOf("\\") != -1){//opera浏览器返回路径信息
fileName = fileName.substring(fileName.lastIndexOf("\\")+1);//去掉路径截取文件名
}
currentFile =  fileItem;
String fileType = fileName.substring(fileName.lastIndexOf('.')+1);
String storedTestSrc = test.getId()+"_"+fileName;


fileItem.write(new File(uploadPath,storedTestSrc));


//            //System.out.println("fileName = "+fileName+", storedTestSrc = "+storedTestSrc);
//            // 创建保存的文件  
//                        File file = new File(uploadPath, fileName);  
//                        // 获取请求的输入流对象  
//                        InputStream is = fileItem.getInputStream();  
//                        // 输出流对象  
//                        FileOutputStream fos = new FileOutputStream(file);  
//                        // 缓冲区大小  
//                        byte[] buffer = new byte[1024];  
//                        // 读取的长度  
//                        int len = 0;  
//                        // 读取 如果读取的结果为-1 证明读取完毕,否则继续读取  
//                        while ((len = is.read(buffer)) != -1) {  
//                            // 写入文件  
//                            fos.write(buffer, 0, len);  
//                        }  
//                        // 关闭流的操作  
//                        is.close();
//                        fos.close();
String converfileName = uploadPath.replaceAll("\\\\", "/")+"/"+storedTestSrc;  

// File pdfFile = null;
// if("doc".equalsIgnoreCase(fileType)||"PPT".equalsIgnoreCase(fileType)||"XLS".equalsIgnoreCase(fileType)||"XLSX".equalsIgnoreCase(fileType)||"pptx".equalsIgnoreCase(fileType)||"XLSX".equalsIgnoreCase(fileType)||"DOCX" .equalsIgnoreCase(fileType)){
// DocConverter dc = new DocConverter(converfileName);
// pdfFile = dc.office2PDF();
//
// }
//
// if(pdfFile != null){
// test.setPdf_path(storedTestSrc.substring(0,storedTestSrc.lastIndexOf('.')+1)+"pdf");
// System.out.println("Pdf_size: "+pdfFile.length());
// test.setPdf_size(pdfFile.length());
// }
test.setUploadDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));//设置试卷上传试卷
test.setContent_type(fileType);//设置试卷类型



test.setTest_src(storedTestSrc);

test.setTest_size(fileItem.getSize()/1024);


}
}
int rs = (Integer) super.sqlMapClientTemplate.update(updateTest, test);
if(rs > 0){
result = "success";
}else{//如果更新失败,则删除记录
super.sqlMapClientTemplate.delete(delete,test.getId());
}


}catch(Exception e){
if (currentFile != null && currentFile.isInMemory()){
String name = currentFile.getName();
currentFile.delete();
System.out.println(name+"上传失败,已经删除");
}
super.sqlMapClientTemplate.delete(delete,test.getId());
}


return result;
}


/**
 * 上传试卷描述
 */
@Override
public int uploadTest(Test test,HttpServletRequest request,
HttpServletResponse response) {
// TODO Auto-generated method stub


// System.out.println("imp_test: title : "+test.getTitle()+",Teacher : "+test.getTeacher());


int rs =  (Integer) super.sqlMapClientTemplate.insert(insert,test);


return  rs;
}
/**
* 更新试卷
*/
@Override
public String update(Test test) {
// TODO Auto-generated method stub
int rs = (Integer) super.sqlMapClientTemplate.update(update, test);
String result = null;
if(rs > 0){
result = "success";
}else{
result="error";
}
return  result;
}
/**
* 删除试卷
*/
@Override
public String delete(int  id) {
// TODO Auto-generated method stub
int rs = (Integer) super.sqlMapClientTemplate.delete(delete, id);
String result = null;
if(rs > 0){
result = "success";
}else{
result="error";
}
return  result;
}


/**
 * 获取试卷信息
 */
@Override
public Test viewTestDetailes(int id) {
// TODO Auto-generated method stub;
return (Test)super.sqlMapClientTemplate.queryForObject(viewTestDetailes,id);
}


/**
* 下载试卷说
*/
@Override
public String downloadTest(String fileName,HttpServletRequest request,HttpServletResponse response){


String result="";
System.out.println("-------------->"+fileName);  
if (!"".equals(fileName)) {
 try {
fileName=new String(fileName.getBytes("iso8859-1"),"UFT-8");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String uploadPath = request.getRealPath("/WEB-INF/upload/"); // 上传文件的目录
String path = uploadPath+"\\"+ fileName;  
System.out.println(path);
File file = new File(path);  
if (file.exists()) {  
//System.out.println(fileName);  
InputStream inputStream = null;  
OutputStream outputStream = null;     
// 以流的形式下载文件  
try {  
inputStream = new FileInputStream(file);  
outputStream = response.getOutputStream();  
byte[] buffer = new byte[inputStream.available()];  
inputStream.read(buffer);  
inputStream.close();  
// 清空response  
response.reset();  
// 设置response的Header  
response.addHeader("Content-Disposition","attachment;fileName=" + new String(fileName.getBytes("UTF-8"),"iso8859-1"));  
response.addHeader("Content-Length", "" + file.length());  
response.setContentType("application/octet-stream");  
outputStream.write(buffer);  
outputStream.flush(); 

Test test = new Test();
test.setTest_src(fileName);

Test selectedtest = null;
try{
selectedtest= (Test) super.sqlMapClientTemplate.queryForObject(selectBySrc, test);
}catch(Exception ex){
result="select error ";

}
if(selectedtest != null){
int newDownLoadTimes = selectedtest.getDownloadTimes()+1;
test.setDownloadTimes(newDownLoadTimes);
test.setId(selectedtest.getId());
test.setTest_src(null);
int rs = (Integer) super.sqlMapClientTemplate.update(update, test);
if(rs > 0){
result = "download success";
}else{
result = "update table error";
}
}else{
result="record not found";
}


} catch (Exception e) {  
// TODO: handle exception  
}finally{  
try {
inputStream.close();
outputStream.close();  
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}  


}  


} else {  
result = "file not found"; 
}  
} else {  
result = "parameter error";  
}  
return result;  
}  
public void viewFile(String fileName,HttpServletRequest request,HttpServletResponse response){

String result="file not found";
System.out.println("-------------->"+fileName);  
if (!"".equals(fileName)) {

String fileType = fileName.substring(fileName.lastIndexOf('.')+1);
System.out.println("fileType: "+fileType);
String uploadPath = request.getRealPath("/WEB-INF/upload"); // 存储文件的目录
String converfileName = uploadPath.replaceAll("\\\\", "/")+"/"+fileName;
String pdfStr ="";
String pdfPath = "";  
File pdfFile = null;
if("doc".equalsIgnoreCase(fileType)||"PPT".equalsIgnoreCase(fileType)||"XLS".equalsIgnoreCase(fileType)||"XLSX".equalsIgnoreCase(fileType)||"pptx".equalsIgnoreCase(fileType)||"XLSX".equalsIgnoreCase(fileType)||"DOCX" .equalsIgnoreCase(fileType)){
pdfStr =fileName.substring(0,fileName.lastIndexOf('.')+1)+"pdf";
pdfPath = uploadPath+"\\"+ pdfStr;
if(!new File(pdfPath).exists()){
DocConverter dc = new DocConverter(converfileName);
pdfFile = dc.office2PDF();

}

fileName = pdfStr;


}

String path = uploadPath+"\\"+ fileName;  


//System.out.println(path);
File file = new File(path);  
if (file.exists()) {  
System.out.println(fileName);  
InputStream inputStream = null;  
OutputStream outputStream = null;     
// 以流的形式下载文件  
try {  
inputStream = new FileInputStream(file);  
outputStream = response.getOutputStream();  
byte[] buffer = new byte[inputStream.available()];  
inputStream.read(buffer);  
inputStream.close();  
// 清空response  
response.reset();  
// 设置response的Header
if("PDF" .equalsIgnoreCase(fileType)){response.setHeader("Content-type","application/pdf");}
else if("TXT" .equalsIgnoreCase(fileType)){response.setHeader("Content-type","text/html;charset=UTF-8");}
//
// else if("DOCX" .equalsIgnoreCase(fileType)){response.setHeader("Content-type","application/vnd.openxmlformats-officedocument.wordprocessingml.document");}
// else if("DOC".equalsIgnoreCase(fileType)){response.setHeader("Content-type", "application/msword");}
// else if("XLS" .equalsIgnoreCase(fileType)){response.setHeader("Content-type","application/vnd.ms-excel");}
// else if("XLSX".equalsIgnoreCase(fileType)){response.setHeader("Content-type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");}
// else if("PPT" .equalsIgnoreCase(fileType)){response.setHeader("Content-type","application/vnd.ms-powerpoint");}
// else if("PPTX".equalsIgnoreCase(fileType)){response.setHeader("Content-type","application/vnd.openxmlformats-officedocument.presentationml.presentation");}
else if("BMP" .equalsIgnoreCase(fileType)){response.setHeader("Content-type","image/bmp");}
else if("GIF" .equalsIgnoreCase(fileType)){response.setHeader("Content-type","image/gif");}
else if("IEF" .equalsIgnoreCase(fileType)){response.setHeader("Content-type","image/ief");}
else if("JPEG".equalsIgnoreCase(fileType)){response.setHeader("Content-type","image/jpeg");}
else if("JPG" .equalsIgnoreCase(fileType)){response.setHeader("Content-type","image/jpeg");}
else if("PNG" .equalsIgnoreCase(fileType)){response.setHeader("Content-type","image/png");}
else if("TIFF".equalsIgnoreCase(fileType)){response.setHeader("Content-type","image/tiff");}
else if("JAVA" .equalsIgnoreCase(fileType)){response.setHeader("Content-type", "java/*");}


//              response.addHeader("Content-Disposition","attachment;fileName=" + fileName);//弹出下载对话框  
request.setCharacterEncoding("UTF-8");
response.addHeader("Content-Length", "" + file.length());  
response.addHeader("Content-Disposition","inline;filename=" + fileName);//打开文档
//              response.setContentType("application/octet-stream");  
outputStream.write(buffer);  
outputStream.flush(); 
result="sucess";


} catch (Exception e) {  
// TODO: handle exception  
}finally{  
try {
inputStream.close();
outputStream.close();  
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}  


}  


} else {  
System.out.println("------------->file not found!!!");  
}  
} else {  
System.out.println("------------->parameter error");  
}  


}






}
0 0
原创粉丝点击