需求为创建上传表与主表id关联 页面显示表格以及上传 、查看、删除 需遍历显示name字段
//使用ssm+maven bootstrap pl/sql
创建表以及索引插入相应测试数据 并在maven中写好底层代码
使用jquery upload.js
前端代码
js方法
function fileInputChange(filePath,allowedFileExtensions,textId,index){
if (!checkFileExt(filePath,allowedFileExtensions)){
Modal.alert({
msg : "请上传["+allowedFileExtensions+"]类型的文件!!"
});
$("#"+textId).val("");
return;
}
$("#"+textId).val(filePath);
//直接上传
$.ajaxFileUpload({
url : $.el.Register.AppUrl + "xqgl/importReport",// conreoller的url地址
secureuri : false,
fileElementId : [ 'tmImport' ],// input上传控件id
data : {
projectId:data.projectId,
},// 自己定=定义的上传的参数
type : "post",
dataType : 'text',
success : function(data, status) {
if (status=="success") {
Modal.alert({
msg : "上传导入成功!!!"
});
$("#xinzengttj").modal("hide");
$("#uploadtable").bootstrapTable('refresh');
} else {
Modal.alert({
msg : "上传导入失败!!!"
});
}
},
error : function(data, status, e) {
Modal.alert({
msg : "系统错误" + e
});
hideWaiting();
}
});
}
util工具类
package com.elitel.fwgl.xqgl.web.main.controller;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
public class FileUtil {
/**
* 获取多文件的文件名
*
* @param request
* @param response
* @param path
* @return
*/
public final static Map<String, Object> fileNameUploads(
HttpServletRequest request) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
Map<String, Object> fileNames = new HashMap<String, Object>();
for (Iterator<?> i = fileMap.keySet().iterator(); i.hasNext();) {
Object obj = i.next();
MultipartFile mFile = (MultipartFile) fileMap.get(obj);
// 得到上传的文件的文件名
String filename = mFile.getOriginalFilename();
if (filename == "" || filename == null) {
continue;
}
fileNames.put(obj.toString(), filename);
}
return fileNames;
}
/**
* 文件上传--单文件
*
* @param request
* @param response
* @param path
* 文件存放路径(path为WebApp\后面的内容)
* @return
*/
public final static String fileUpload(HttpServletRequest request,
HttpServletResponse response, String path) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
MultipartFile mFile = null;
for (Iterator<?> i = fileMap.keySet().iterator(); i.hasNext();) {
Object obj = i.next();
mFile = (MultipartFile) fileMap.get(obj);
}
String filePath = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
try {
// 得到上传的文件的文件名
String filename = mFile.getOriginalFilename();
// 获取文件后缀名
if (filename != null && !("").equals(filename)) {
String fileExt = filename.substring(filename.indexOf("."));
// 按时间格式重新生成文件名
String newFileName = sdf.format(new Date())+ (int)(Math.random() * 100) + fileExt;
filePath = path + "/" + newFileName;
//filePath = path + "/" + filename;
// 得到上传服务器的物理路径
path = request.getSession().getServletContext()
.getRealPath("\\" + path);
// 文件流写到服务器端
File saveFile = new File(path, newFileName);
//File saveFile = new File(path, filename);
FileCopyUtils.copy(mFile.getBytes(), saveFile);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return filePath;
}
/**
* 文件上传--多文件
*
* @param request
* @param response
* @param filePaths
* (fileinputId,WebApp\后面的内容)
* @return
*/
public final static Map<String, Object> fileUploads(
HttpServletRequest request, HttpServletResponse response,
String path) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
Map<String, Object> filePaths = new HashMap<String, Object>();
// 得到上传服务器的物理路径
String fileUrl = request.getSession().getServletContext()
.getRealPath("\\" + path);
for (Iterator<?> i = fileMap.keySet().iterator(); i.hasNext();) {
Object obj = i.next();
MultipartFile mFile = (MultipartFile) fileMap.get(obj);
// 得到上传的文件的文件名
String filename = mFile.getOriginalFilename();
if (filename == "" || filename == null) {
continue;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
// 获取文件后缀名
String fileExt = filename.substring(filename.indexOf("."));
// 按时间格式重新生成文件名
String newFileName = sdf.format(new Date())
+ (int) (Math.random() * 100) + fileExt;
String filePath = path + "/" + newFileName;
// 文件流写到服务器端
try {
filePaths.put(obj.toString(), filePath);
File saveFile = new File(fileUrl, newFileName);
FileCopyUtils.copy(mFile.getBytes(), saveFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return filePaths;
}
/**
* 删除文件
*
* @param path
* 文件存放路径(path为WebApp\后面的内容---数据库中存放的文件路径)
* @return 成功标识(true/false)
*/
public final static boolean fileDelete(HttpServletRequest request,
HttpServletResponse response, String path) {
String filePath = request.getSession().getServletContext()
.getRealPath(path);
File file = new File(filePath);
boolean boo = false;
if (file.isFile() && file.exists()) {
// 是文件并且文件存在,调用删除文件方法
boo = file.delete();
}
return boo;
}
/**
* 打开文件
*
* @param request
* @param response
*/
public final static void openFile(HttpServletRequest request,
HttpServletResponse response, String filePath) {
// 解决javaScript传参乱码
ServletOutputStream out = null;
InputStream in = null;
try {
filePath = java.net.URLDecoder.decode(filePath, "UTF-8");
filePath = request.getSession().getServletContext()
.getRealPath("/" + filePath);
in = new FileInputStream(filePath);
out = response.getOutputStream();
int len = 0;
byte[] buffer = new byte[1024];
while ((len = in.read(buffer, 0, 1024)) != -1) {
out.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("文件不存在!!!");
e.printStackTrace();
} catch (IOException e) {
System.out.println("文件流输出异常!!!");
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("文件流关闭异常!!!");
e.printStackTrace();
}
}
}
/**
* 根据Doc模板生成word文件
*
* @param dataMap
* Map 需要填入模板的数据
* @param fileName
* 文件名称
* @param savePath
* 保存路径
*/
public final static void wordExport(HttpServletRequest request,
Map<String, Object> dataMap, String savePath) {
Configuration configure = new Configuration();
configure.setDefaultEncoding("utf-8");
try {
// 加载需要装填的模板
Template template = null;
// 加载模板文件
configure.setClassForTemplateLoading(FileUtil.class,
"/com/elitel/hljxmgl/jgjg/web/main/controller");
// configure.setServletContextForTemplateLoading(sc, "/data");
String modelPath = request.getSession().getServletContext()
.getRealPath("/static/data");
configure.setDirectoryForTemplateLoading(new File(modelPath));
// 设置对象包装器
configure.setObjectWrapper(new DefaultObjectWrapper());
// 设置异常处理器
configure
.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
// 定义Template对象,注意模板类型名字与downloadType要一致
template = configure.getTemplate("jgjgmodel.ftl");
// 输出文档
File outFile = new File(savePath);
Writer out = null;
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(outFile), "utf-8"));
template.process(dataMap, out);
outFile.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
public final static void wordExport2(HttpServletRequest request,
Map<String, Object> dataMap, String savePath) {
Configuration configure = new Configuration();
configure.setDefaultEncoding("utf-8");
try {
// 加载需要装填的模板
Template template = null;
// 加载模板文件
configure.setClassForTemplateLoading(FileUtil.class,
"com.elitel.hljxmgl.xtgl.web.main.controller");
// configure.setServletContextForTemplateLoading(sc, "/data");
String modelPath = request.getSession().getServletContext()
.getRealPath("/static/data");
configure.setDirectoryForTemplateLoading(new File(modelPath));
// 设置对象包装器
configure.setObjectWrapper(new DefaultObjectWrapper());
// 设置异常处理器
configure
.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
// 定义Template对象,注意模板类型名字与downloadType要一致
template = configure.getTemplate("jbxxXmgk.ftl");
// 输出文档
File outFile = new File(savePath);
Writer out = null;
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(outFile), "utf-8"));
template.process(dataMap, out);
outFile.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void fileDownLoad(HttpServletRequest request,
HttpServletResponse response, String path) throws IOException {
path = URLDecoder.decode(path, "utf-8");
String filename = request.getSession().getServletContext()
.getRealPath(path); // 生成文件的文件名称 这个需要动态的获取
// OutputStream out;// 输出响应正文的输出流
ServletOutputStream out;
// InputStream in;// 读取本地文件的输入流
FileInputStream in;
// 获得本地输入流
File file = new File(filename);
in = new FileInputStream(file);
// 设置响应正文的MIME类型
response.setContentType("Content-Disposition;charset=GB2312");
response.setHeader("Content-Disposition", "attachment;"
+ " filename="
+ new String(path.substring(path.lastIndexOf("/") + 1)
.getBytes(), "ISO-8859-1"));
// 把本地文件发送给客户端
out = response.getOutputStream();
int byteRead = 0;
byte[] buffer = new byte[512];
while ((byteRead = in.read(buffer)) != -1) {
out.write(buffer, 0, byteRead);
}
out.flush();
in.close();
out.close();
}
/**
* 读取序列化到本地的文件并转化成对象
*
* @author wangds
* @date 2018-04-28
* @param <T>
* @param path
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T readMapToMemory(String path) {
FileInputStream fis = null;
T t = null;
try {
fis = new FileInputStream(path);
} catch (FileNotFoundException e) {
System.out.println("文件路径找不到" + path);
}
ObjectInputStream ois;
try {
ois = new ObjectInputStream(fis);
t = (T) ois.readObject();
ois.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return t;
}
/**
* 对象序列化后存到磁盘
*
* @author wangds
* @date 2018-04-28
* @param path
* @param map
*/
public static void saveMapToDisk(String path, Object obj) {
FileOutputStream fos = null;
try {
fos = new FileOutputStream(path);
} catch (FileNotFoundException e) {
System.out.println("文件路径找不到" + path);
}
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static boolean deletefile(String delpath){
File file = new File(delpath);
if (file.exists()) {
if (!file.isDirectory()) {
file.delete();
} else if (file.isDirectory()) {
String[] filelist = file.list();
for (int i = 0; i < filelist.length; i++) {
File delfile = new File(delpath + "\\" + filelist[i]);
if (!delfile.isDirectory())
delfile.delete();
else if (delfile.isDirectory())
deletefile(delpath + "\\" + filelist[i]);
}
file.delete();
}
}
return true;
}
}
Controller方法
@RequestMapping("/importReport")
@ResponseBody
public int importReportByExcel(HttpServletRequest request,HttpServletResponse response,TbUpload params){
LogCtrl.info(log, "XqglController从模板导入数据开始。。。");
String dizhi=FileUtil.fileUpload(request, response, "static/upload/data");
String name=(String)FileUtil.fileNameUploads(request).get("tmImport");
params.setDizhi(dizhi);//文件地址存入数据库
params.setName(name);//文件姓名存入数据库
LogCtrl.info(log, "XqglController从模板导入数据完成。。。");
System.out.println(params.getProjectId());
return service.insertupload(params);//执行新增方法存入数据库
}