js:
1.上传:
//上传附件
function openUpload(){
var file = $("input[name='fileUpload']").val();
if(file == ""){
$.messager.alert("上传","请上传附件!");
}else {
$.ajaxFileUpload({
url: G_CTX_PATH+'/offer/relationManager/doFileUpload', //用于文件上传的服务器端请求地址
type: 'post',
secureuri: false, //是否需要安全协议,一般设置为false
fileElementId: 'fileUpload', //文件上传域的ID
dataType: 'text', //返回值类型 一般设置为json
success: function (data, status){//服务器成功响应处理函数
var $tr = $("<tr>"+
"<td></td>"+
"<td colspan='3'><a style='color:#0000FF' onClick=openWin(this,'"+data+"') >"+data+"</a> " +
"<a style='color:#FF0000;' onClick=deleteWin(this,'"+data+"')>删除</a></td>"+
"</tr>");
var $table = $("#contract");
$table.append($tr);
fileNames.push(data);
$("input[name='fileNames']").val(fileNames);
},
error: function (data, status, e){//服务器响应失败处理函数
}
});
}
}
2.预览:
//打开附件
function openLocal(fileName){
$("#divChooseNumber").hide();
var url = G_CTX_PATH + "/fileUpload/" + fileName;
window.open(url);
//var url = "/offer/relationManager/openLocal?fileName="+fileName;
//window.location.href=G_CTX_PATH+url;
}
3.下载:
//下载附件
function downloadLocal(fileName){
$("#divChooseNumber").hide();
var url = "/offer/relationManager/downloadLocal?fileName="+fileName;
//var url = "/offer/relationManager/download?fileName="+fileName;
window.location.href=G_CTX_PATH+url;
}
java:
/**
* 上传
* @param request
* @param response
* @return
* @throws IOException
*/
@RequestMapping(value = "/doFileUpload")
@ResponseBody
public String doFileUpload(final HttpServletRequest request,
HttpServletResponse response) throws IOException {
// String fileName = null;
//
// DiskFileItemFactory factory = new DiskFileItemFactory();
//
// ServletFileUpload upload = new ServletFileUpload(factory);
//
// try {
// List<FileItem> items = upload.parseRequest(request);
// for(FileItem item : items) {
// //其他参数
// String type = item.getContentType();
// if(type == null) {
// continue;
// }
//
// //文件参数
// fileName = item.getName();
//
// //设置保存文件路径
// String realPath = request.getServletContext().getRealPath("/image");
// File dir = new File(realPath);
// File f = new File(dir, fileName);
//
// if(f.exists()) {
// f.delete();
// }
// f.createNewFile();
//
// //保存
// item.write(f);
//
// }
// } catch (FileUploadException e) {
// e.printStackTrace();
// } catch (Exception e) {
// e.printStackTrace();
// }
String fileName = null;
//文件物理路径
String filePath = request.getServletContext().getRealPath("/");
//创建一个通用的多部分解析器.
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//设置编码
commonsMultipartResolver.setDefaultEncoding("utf-8");
//判断 request 是否有文件上传,即多部分请求...
if (commonsMultipartResolver.isMultipart(request)){
//转换成多部分request
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// MultipartHttpServletRequest multipartRequest = commonsMultipartResolver.resolveMultipart(request); //获取不到文件
// Iterator<String> it = multipartRequest.getFileNames();
// while (it.hasNext()) {
// MultipartFile file = multipartRequest.getFile(it.next());
// }
// file 是指 文件上传标签的 name=值
// 根据 name 获取上传的文件...
MultipartFile file = multipartRequest.getFile("fileUpload");
fileName = file.getOriginalFilename();
String path = filePath + "fileUpload/" + fileName; //上传路径
File uploadFiile = new File(path);
file.transferTo(uploadFiile);
}
return fileName;
}
/**
* 下载
* @param request
* @param response
* @throws FileNotFoundException
*/
@RequestMapping(value = "/downloadLocal")
@ResponseBody
public void downloadLocal(HttpServletRequest request, HttpServletResponse response) throws FileNotFoundException {
// 下载本地文件
String fileName = request.getParameter("fileName"); // 文件的默认保存名
String filePath = request.getServletContext().getRealPath("/");
// 读到流中
InputStream inStream = new FileInputStream(filePath + "fileUpload/" + fileName);// 文件的存放路径
// 设置输出的格式
response.reset();
response.setContentType("bin");
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
// 循环取出流中的数据
byte[] b = new byte[100];
int len;
try {
while ((len = inStream.read(b)) > 0)
response.getOutputStream().write(b, 0, len);
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 打开
* @param request
* @param response
* @throws IOException
*/
@RequestMapping(value = "/openLocal")
@ResponseBody
public void openLocal(HttpServletRequest request, HttpServletResponse response) throws IOException {
boolean isOnLine = true;
String fileName = request.getParameter("fileName");
String filePath = request.getServletContext().getRealPath("/") + "fileUpload/" + fileName;
File f = new File(filePath);
if (!f.exists()) {
response.sendError(404, "File not found!");
return;
}
BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
byte[] buf = new byte[1024];
int len = 0;
response.reset(); // 非常重要
if (isOnLine) { // 在线打开方式
URL u = new URL("file:///" + filePath);
response.setContentType(u.openConnection().getContentType());
response.setHeader("Content-Disposition", "inline; filename=" + f.getName());
// 文件名应该编码成UTF-8
} else { // 纯下载方式
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + f.getName());
}
OutputStream out = response.getOutputStream();
while ((len = br.read(buf)) > 0)
out.write(buf, 0, len);
br.close();
out.close();
}
/**
* 下载2
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/download")
@ResponseBody
public HttpServletResponse download(HttpServletRequest request, HttpServletResponse response) {
try {
String fileName = request.getParameter("fileName");
String path = request.getServletContext().getRealPath("/") + "fileUpload/" + fileName;
// path是指欲下载的文件的路径。
File file = new File(path);
// 取得文件名。
String filename = file.getName();
// 取得文件的后缀名。
String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(path));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return response;
}