处理多附件上传功能
2017-11-21 18:11
260 查看
项目中使用到附件上传功能,就封装了一个共同的页面。我项目的附件是上传后存到某个路径下,将文件名和路径存放到文件表中。
存放表结构如下:
单附件上传
共同jsp页面如下:(affixFile.jsp)
附件上传后台代码:
FileInfoController.java
package com.fh.util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile;
/**
* 上传文件
* 创建人:mhanyue
* 创建时间:2017年11月21日
* @version
*/
public class FileUpload {
/**上传文件
* @param file //文件对象
* @param filePath //上传路径
* @param fileName //文件名
* @return 文件名
*/
public static String fileUp(MultipartFile file, String filePath, String fileName){
String extName = ""; // 扩展名格式:
try {
if (file.getOriginalFilename().lastIndexOf(".") >= 0){
extName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
}
copyFile(file.getInputStream(), filePath, fileName+extName).replaceAll("-", "");
} catch (IOException e) {
System.out.println(e);
}
return fileName+extName;
}
/**
* 写文件到当前目录的upload目录中
* @param in
* @param fileName
* @throws IOException
*/
private static String copyFile(InputStream in, String dir, String realName)
throws IOException {
File file = mkdirsmy(dir,realName);
FileUtils.copyInputStreamToFile(in, file);
return realName;
}
/**判断路径是否存在,否:创建此路径
* @param dir 文件路径
* @param realName 文件名
* @throws IOException
*/
public static File mkdirsmy(String dir, String realName) throws IOException{
File file = new File(dir, realName);
if (!file.exists()) {
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
file.createNewFile();
}
return file;
}
/**下载网络图片上传到服务器上
* @param httpUrl 图片网络地址
* @param filePath 图片保存路径
* @param myFileName 图片文件名(null时用网络图片原名)
* @return 返回图片名称
*/
public static String getHtmlPicture(String httpUrl, String filePath , String myFileName) {
URL url; //定义URL对象url
BufferedInputStream in; //定义输入字节缓冲流对象in
FileOutputStream file; //定义文件输出流对象file
try {
String fileName = null == myFileName?httpUrl.substring(httpUrl.lastIndexOf("/")).replace("/", ""):myFileName; //图片文件名(null时用网络图片原名)
url = new URL(httpUrl); //初始化url对象
in = new BufferedInputStream(url.openStream()); //初始化in对象,也就是获得url字节流
//file = new FileOutputStream(new File(filePath +"\\"+ fileName));
file
a197
= new FileOutputStream(mkdirsmy(filePath,fileName));
int t;
while ((t = in.read()) != -1) {
file.write(t);
}
file.close();
in.close();
return fileName;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
Service层的代码就不贴出来了。
多附件上传
多附件上传只是在单附件的基础上增加【multiple="multiple"】属性,后台参数接收多个附件参数就可以。具体如下:
affixFile_more.jsp
<%--
Created by IntelliJ IDEA.
User: liuying
Date: 2017/7/25
Time: 下午7:37
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!-- 下载文件 -->
<script type="text/javascript" src="static/js/sinosoft/download.js"></script>
<link rel="stylesheet" id='skin' type="text/css" href="static/js/ymPrompt/skin/qq/ymPrompt.css" />
<script type="text/javascript" src="static/js/ymPrompt/ymPrompt.js"></script>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
String FILE_REF_TAB_NAME = request.getParameter("FILE_REF_TAB_NAME");
String FILE_REF_TAB_KEY_NAME = request.getParameter("FILE_REF_TAB_KEY_NAME");
String FILE_REF_TAB_KEY_ID = request.getParameter("FILE_REF_TAB_KEY_ID");
String FILE_REF_TAB_FIELD_NAME = request.getParameter("FILE_REF_TAB_FIELD_NAME");
String KEY_ID = request.getParameter("KEY_ID");
String FILE_TYPE = request.getParameter("FILE_TYPE");
String FILE_TYPE_MESSAGE = request.getParameter("FILE_TYPE_MESSAGE");
%><base href="<%=basePath%>">
<html>
<head>
<title>附件上传</title>
<script>
/**
* 上传附件
*/
function uploadFiles(KEY_ID,FILE_REF_TAB_NAME,FILE_REF_TAB_KEY_ID,FILE_REF_TAB_KEY_NAME){
var fieldName = KEY_ID.substring(0,KEY_ID.lastIndexOf("_"));
var formData = new FormData($( "#fileForm"+KEY_ID)[0]);
formData.append("uploadFile",$("#"+KEY_ID)[0].files[0]);
formData.append("FILE_REF_TAB_FIELD_NAME",fieldName);
formData.append("FILE_REF_TAB_KEY_ID",FILE_REF_TAB_KEY_ID);
formData.append("FILE_REF_TAB_NAME",FILE_REF_TAB_NAME);
formData.append("FILE_REF_TAB_KEY_NAME",FILE_REF_TAB_KEY_NAME);
var fileInfo = $('#fileForm'+KEY_ID).find('input[class="fileInfo"]');
formData.append("fileInfo",fileInfo);
$.ajax({
url: '<%=basePath%>/fileinfo/saveMore.do',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function(data){
if("true" == data.result){
var fileTr = data.fileTr;
$('#fileInfoDiv'+KEY_ID).find("table").eq(0).append(fileTr);
}else if("false" == data.result){
var msg = data.msg;
ymPrompt.alert({title : '系统提示',message : msg});
}
}
});
}
$(function() {
//上传
$('#<%=KEY_ID %>').ace_file_input({
no_file:'请选择文件 ...',
btn_choose:'选择',
btn_change:'更改',
show_file_list:true,
droppable:false,
onchange:uploadFiles,
thumbnail:false, //| true | large
allowExt: [<%=FILE_TYPE%>],//该属性只是对文件后缀的控制
//选择文件 展示之前的事件
before_change: function (files, dropped) {
uploadFiles('<%=KEY_ID %>','<%=FILE_REF_TAB_NAME%>','<%=FILE_REF_TAB_KEY_ID%>','<%=FILE_REF_TAB_KEY_NAME %>');
return -1;
}
});
}).on('<%=KEY_ID %>', function(event, info) {
//alert("请上传<%=FILE_TYPE_MESSAGE%>格式文件","提示");
ymPrompt.alert({title : '系统提示',message : "请上传<%=FILE_TYPE_MESSAGE%>格式文件"});
});
</script>
</head>
<body>
<form id="fileForm<%=KEY_ID %>" name="fileForm" enctype="multipart/form-data">
<div class="col-sm-9">
<div id="fileInfoDiv<%=KEY_ID %>" style="cursor:pointer;">
<table>
</table>
</div>
<input type="file" id="<%=KEY_ID %>" name="uploadFile" multiple="multiple"/>
</div>
</form>
</body>
</html>
上述仅适自己项目中使用的情况,记录一下。
存放表结构如下:
单附件上传
共同jsp页面如下:(affixFile.jsp)
<%-- Created by IntelliJ IDEA. User: liuying Date: 2017/7/25 Time: 下午7:37 To change this template use File | Settings | File Templates. --%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <!-- 下载文件 --> <script type="text/javascript" src="static/js/sinosoft/download.js"></script> <link rel="stylesheet" id='skin' type="text/css" href="static/js/ymPrompt/skin/qq/ymPrompt.css" /> <script type="text/javascript" src="static/js/ymPrompt/ymPrompt.js"></script> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; String FILE_REF_TAB_NAME = request.getParameter("FILE_REF_TAB_NAME"); String FILE_REF_TAB_KEY_NAME = request.getParameter("FILE_REF_TAB_KEY_NAME"); String FILE_REF_TAB_KEY_ID = request.getParameter("FILE_REF_TAB_KEY_ID"); String FILE_REF_TAB_FIELD_NAME = request.getParameter("FILE_REF_TAB_FIELD_NAME"); String KEY_ID = request.getParameter("KEY_ID"); String FILE_TYPE = request.getParameter("FILE_TYPE"); String FILE_TYPE_MESSAGE = request.getParameter("FILE_TYPE_MESSAGE"); %><base href="<%=basePath%>"> <html> <head> <title>附件上传</title> <script> /** * 上传附件 */ function uploadFiles(KEY_ID,FILE_REF_TAB_NAME,FILE_REF_TAB_KEY_ID,FILE_REF_TAB_KEY_NAME){ var fieldName = KEY_ID.substring(0,KEY_ID.lastIndexOf("_")); var formData = new FormData($( "#fileForm"+KEY_ID)[0]); formData.append("uploadFile",$("#"+KEY_ID)[0].files[0]); formData.append("FILE_REF_TAB_FIELD_NAME",fieldName); formData.append("FILE_REF_TAB_KEY_ID",FILE_REF_TAB_KEY_ID); formData.append("FILE_REF_TAB_NAME",FILE_REF_TAB_NAME); formData.append("FILE_REF_TAB_KEY_NAME",FILE_REF_TAB_KEY_NAME); var fileInfo = $('#fileForm'+KEY_ID).find('input[class="fileInfo"]'); formData.append("fileInfo",fileInfo); $.ajax({ url: '<%=basePath%>/fileinfo/save.do', type: 'POST', data: formData, async: false, cache: false, contentType: false, processData: false, success: function(data){ if("true" == data.result){ var fileTr = data.fileTr; $('#fileInfoDiv'+KEY_ID).find("table").eq(0).append(fileTr); }else if("false" == data.result){ var msg = data.msg; ymPrompt.alert({title : '系统提示',message : msg}); } } }); } $(function() { //上传 $('#<%=KEY_ID %>').ace_file_input({ no_file:'请选择文件 ...', btn_choose:'选择', btn_change:'更改', show_file_list:true, droppable:false, onchange:uploadFiles, thumbnail:false, //| true | large allowExt: [<%=FILE_TYPE%>],//该属性只是对文件后缀的控制 // 4000 选择文件 展示之前的事件 before_change: function (files, dropped) { uploadFiles('<%=KEY_ID %>','<%=FILE_REF_TAB_NAME%>','<%=FILE_REF_TAB_KEY_ID%>','<%=FILE_REF_TAB_KEY_NAME %>'); return -1; } }); }).on('<%=KEY_ID %>', function(event, info) { //alert("请上传<%=FILE_TYPE_MESSAGE%>格式文件","提示"); ymPrompt.alert({title : '系统提示',message : "请上传<%=FILE_TYPE_MESSAGE%>格式文件"}); }); </script> </head> <body> <form id="fileForm<%=KEY_ID %>" name="fileForm" enctype="multipart/form-data"> <div class="col-sm-9"> <div id="fileInfoDiv<%=KEY_ID %>" style="cursor:pointer;"> <table> </table> </div> <input type="file" id="<%=KEY_ID %>" name="uploadFile" /> </div> </form> </body> </html>页面调用处代码如下:
<!-- 附件上传 --> <jsp:include page="../tools/affix/affixFile.jsp"> <jsp:param value="QY_APPLY_INFO" name="FILE_REF_TAB_NAME"/> <jsp:param value="QY_PROMISE_FILE" name="FILE_REF_TAB_FIELD_NAME"/> <jsp:param value="${pd.APPLY_ID}" name="FILE_REF_TAB_KEY_ID"/> <jsp:param value="APPLY_ID" name="FILE_REF_TAB_KEY_NAME"/> <jsp:param value="QY_PROMISE_FILE_0" name="KEY_ID"/> <jsp:param value="<%=file_type %>" name="FILE_TYPE"/> <jsp:param value="<%=file_type_message %>" name="FILE_TYPE_MESSAGE"/> </jsp:include>
附件上传后台代码:
FileInfoController.java
package com.sinosoft.controller.common; import java.io.PrintWriter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import com.fh.entity.system.User; import com.fh.util.*; import com.sinosoft.constant.FieldValueConstant; import com.sinosoft.service.common.FileInfoManager; import net.sf.json.JSONObject; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import com.fh.controller.base.BaseController; import com.fh.entity.Page; /** * 说明:附件表 创建人:mhanyue 创建时间:2017-07-25 */ @Controller @RequestMapping(value = "/fileinfo") public class FileInfoController extends BaseController { String menuUrl = "fileinfo/list.do"; // 菜单地址(权限用) @Resource(name = "fileinfoService") private FileInfoManager fileinfoService; /** * 保存附件(单附件) * * @author:liuying * @date:2017-07-25 * @param * @throws Exception */ @RequestMapping(value = "/save") @ResponseBody public JSONObject save( @RequestParam(value = "uploadFile", required = false) MultipartFile uploadFile, String FILE_REF_TAB_NAME, String FILE_REF_TAB_KEY_NAME, String FILE_REF_TAB_KEY_ID, String FILE_REF_TAB_FIELD_NAME) throws Exception { logBefore(logger, Jurisdiction.getUsername() + "新增FileInfo"); JSONObject json = new JSONObject(); PageData pd = new PageData(); pd = this.getPageData(); // 获取用户信息 User userInfo = (User) Jurisdiction.getSession().getAttribute( Const.SESSION_USER); String userName = userInfo.getNAME(); String sourceFile = DateUtil.getDays(), fileName = ""; if (null != sourceFile && !sourceFile.isEmpty()) { // 获取文件相关信息 String filePath = FieldValueConstant.OUTPUT_FILE_PATH + sourceFile + "/uploadFiles/";// 修改Const.FILEPATHFILE到时间戳文件夹 //文件上传路径 // 改动PathUtil.getClasspath() String outPath = sourceFile + "/uploadFiles/"; String sourceFileName = uploadFile.getOriginalFilename(); // 执行上传操作,保存文件到磁盘 fileName = FileUpload .fileUp(uploadFile, filePath, this.get32UUID()); // 执行上传 // 获取文件后缀名 String filePostfix_type = fileName.substring( fileName.lastIndexOf("."), fileName.length()); String fileId = this.get32UUID().toString(); pd.put("FILE_ID", fileId); pd.put("FILE_REF_TAB_NAME", FILE_REF_TAB_NAME); pd.put("FILE_REF_TAB_FIELD_NAME", FILE_REF_TAB_FIELD_NAME); pd.put("FILE_REF_TAB_KEY_ID", FILE_REF_TAB_KEY_ID); pd.put("FILE_REF_TAB_KEY_NAME", FILE_REF_TAB_KEY_NAME); pd.put("FILE_POSTFIX_TYPE", filePostfix_type);// 文件后缀名 pd.put("FILE_CONTENT", ""); pd.put("FILE_NAME", sourceFileName); pd.put("FILE_PATH", filePath); pd.put("CREATE_USER", userName); pd.put("CREATE_TIME", new Date()); pd.put("FILE_NAME_NEW", fileName); pd.put("FILE_FLAG", "1"); String basePath = PathUtil.PathAddress(); // 追加回调tr String fileTr = "<tr>"; fileTr += "<td><a href=\"javascript:void(0)\" onclick=\"downLoadFileNew('" + sourceFileName + "','" + outPath + "','" + fileName + "','" + basePath + "')\">" + sourceFileName + "</a></td>";// <a // href=\""+filePath.replace("../../","/")+"\"> fileTr += "<td><a href=\"javascript:void(0)\" onclick=\"deleteFile(this,'" + fileId + "')\">删除</td>";// fileTr += "</tr>"; fileinfoService.save(pd); json.put("result", "true"); json.put("msg", "上传成功"); json.put("fileTr", fileTr); } else { json.put("msg", "上传失败,请重新上传!"); json.put("result", "false"); } return json; } /** * 保存附件(多附件) * * @author:liuying * @date:2017-07-25 * @param * @throws Exception */ @RequestMapping(value = "/saveMore") @ResponseBody public JSONObject saveMore( @RequestParam(value = "uploadFile", required = false) MultipartFile[] uploadFile, String FILE_REF_TAB_NAME, String FILE_REF_TAB_KEY_NAME, String FILE_REF_TAB_KEY_ID, String FILE_REF_TAB_FIELD_NAME) throws Exception { logBefore(logger, Jurisdiction.getUsername() + "新增FileInfo"); JSONObject json = new JSONObject(); PageData pd = new PageData(); pd = this.getPageData(); // 获取用户信息 User userInfo = (User) Jurisdiction.getSession().getAttribute( Const.SESSION_USER); String userName = userInfo.getNAME(); String fileTr = ""; for (int i = 0; i < uploadFile.length; i++) { String sourceFile = DateUtil.getDays(), fileName = ""; if (null != sourceFile && !sourceFile.isEmpty()) { // 获取文件相关信息 String filePath = FieldValueConstant.OUTPUT_FILE_PATH + sourceFile + "/uploadFiles/";// 修改Const.FILEPATHFILE到时间戳文件夹 // //文件上传路径 // 改动PathUtil.getClasspath() String outPath = sourceFile + "/uploadFiles/"; String sourceFileName = uploadFile[i].getOriginalFilename(); // 执行上传操作,保存文件到磁盘 fileName = FileUpload.fileUp(uploadFile[i], filePath, this.get32UUID()); // 执行上传 // 获取文件后缀名 String filePostfix_type = fileName.substring( fileName.lastIndexOf("."), fileName.length()); String fileId = this.get32UUID().toString(); pd.put("FILE_ID", fileId); pd.put("FILE_REF_TAB_NAME", FILE_REF_TAB_NAME); pd.put("FILE_REF_TAB_FIELD_NAME", FILE_REF_TAB_FIELD_NAME); pd.put("FILE_REF_TAB_KEY_ID", FILE_REF_TAB_KEY_ID); pd.put("FILE_REF_TAB_KEY_NAME", FILE_REF_TAB_KEY_NAME); pd.put("FILE_POSTFIX_TYPE", filePostfix_type);// 文件后缀名 pd.put("FILE_CONTENT", ""); pd.put("FILE_NAME", sourceFileName); pd.put("FILE_PATH", filePath); pd.put("CREATE_USER", userName); pd.put("CREATE_TIME", new Date()); pd.put("FILE_NAME_NEW", fileName); pd.put("FILE_FLAG", "1"); String basePath = PathUtil.PathAddress(); // 追加回调tr fileTr += "<tr>"; fileTr += "<td><a href=\"javascript:void(0)\" onclick=\"downLoadFileNew('" + sourceFileName + "','" + outPath + "','" + fileName + "','" + basePath + "')\">" + sourceFileName + "</a></td>"; fileTr += "<td><a href=\"javascript:void(0)\" onclick=\"deleteFile(this,'" + fileId + "')\">删除</td>";// fileTr += "</tr>"; fileinfoService.save(pd); } else { json.put("msg", "上传失败,请重新上传!"); json.put("result", "false"); } } json.put("result", "true"); json.put("msg", "上传成功"); json.put("fileTr", fileTr); return json; } /** * 删除 * * @param out * @throws Exception */ @RequestMapping(value = "/delete") public void delete(PrintWriter out) throws Exception { logBefore(logger, Jurisdiction.getUsername() + "删除FileInfo"); if (!Jurisdiction.buttonJurisdiction(menuUrl, "del")) { return; } // 校验权限 PageData pd = new PageData(); pd = this.getPageData(); fileinfoService.delete(pd); out.write("success"); out.close(); } /** * 删除 * * @param out * @throws Exception */ @RequestMapping(value = "/deleteFile") @ResponseBody public JSONObject deleteFile(Page page) throws Exception { logBefore(logger, Jurisdiction.getUsername() + "删除FileInfo"); PageData pd = new PageData(); pd = this.getPageData(); page.setPd(pd); JSONObject jsonObj = new JSONObject(); try { fileinfoService.delete(pd); jsonObj.put("result", true); } catch (Exception e) { jsonObj.put("result", false); } return jsonObj; } /** * 列表 * * @param FILE_REF_TAB_KEY_ID * 主键ID * @throws Exception */ @RequestMapping(value = "/list") @ResponseBody public JSONObject list(String FILE_REF_TAB_NAME, String FILE_REF_TAB_KEY_NAME, String FILE_REF_TAB_KEY_ID, String FILE_REF_TAB_FIELD_NAME, String operator) throws Exception { logBefore(logger, Jurisdiction.getUsername() + "列表FileInfo"); // if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;} // //校验权限(无权查看时页面会有提示,如果不注释掉这句代码就无法进入列表页面,所以根据情况是否加入本句代码) JSONObject json = new JSONObject(); String fileListStr = fileinfoService.listById(FILE_REF_TAB_NAME, FILE_REF_TAB_KEY_NAME, FILE_REF_TAB_KEY_ID, FILE_REF_TAB_FIELD_NAME, operator); // System.out.println("fileList=====" + fileListStr); json.put("fileTr", fileListStr); return json; } /** * 去新增页面 * * @param * @throws Exception */ @RequestMapping(value = "/goAdd") public ModelAndView goAdd() throws Exception { ModelAndView mv = this.getModelAndView(); PageData pd = new PageData(); pd = this.getPageData(); mv.setViewName("fileInfo/fileinfo/fileinfo_edit"); mv.addObject("msg", "save"); mv.addObject("pd", pd); return mv; } /** * 去修改页面 * * @param * @throws Exception */ @RequestMapping(value = "/goEdit") public ModelAndView goEdit() throws Exception { ModelAndView mv = this.getModelAndView(); PageData pd = new PageData(); pd = this.getPageData(); pd = fileinfoService.findById(pd); // 根据ID读取 mv.setViewName("fileInfo/fileinfo/fileinfo_edit"); mv.addObject("msg", "edit"); mv.addObject("pd", pd); return mv; } /** * 批量删除 * * @param * @throws Exception */ @RequestMapping(value = "/deleteAll") @ResponseBody public Object deleteAll() throws Exception { logBefore(logger, Jurisdiction.getUsername() + "批量删除FileInfo"); if (!Jurisdiction.buttonJurisdiction(menuUrl, "del")) { return null; } // 校验权限 PageData pd = new PageData(); Map<String, Object> map = new HashMap<String, Object>(); pd = this.getPageData(); List<PageData> pdList = new ArrayList<PageData>(); String DATA_IDS = pd.getString("DATA_IDS"); if (null != DATA_IDS && !"".equals(DATA_IDS)) { String ArrayDATA_IDS[] = DATA_IDS.split(","); fileinfoService.deleteAll(ArrayDATA_IDS); pd.put("msg", "ok"); } else { pd.put("msg", "no"); } pdList.add(pd); map.put("list", pdList); return AppUtil.returnObject(pd, map); } @InitBinder public void initBinder(WebDataBinder binder) { DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); binder.registerCustomEditor(Date.class, new CustomDateEditor(format, true)); } }FileUpload.java
package com.fh.util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.io.FileUtils;
import org.springframework.web.multipart.MultipartFile;
/**
* 上传文件
* 创建人:mhanyue
* 创建时间:2017年11月21日
* @version
*/
public class FileUpload {
/**上传文件
* @param file //文件对象
* @param filePath //上传路径
* @param fileName //文件名
* @return 文件名
*/
public static String fileUp(MultipartFile file, String filePath, String fileName){
String extName = ""; // 扩展名格式:
try {
if (file.getOriginalFilename().lastIndexOf(".") >= 0){
extName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
}
copyFile(file.getInputStream(), filePath, fileName+extName).replaceAll("-", "");
} catch (IOException e) {
System.out.println(e);
}
return fileName+extName;
}
/**
* 写文件到当前目录的upload目录中
* @param in
* @param fileName
* @throws IOException
*/
private static String copyFile(InputStream in, String dir, String realName)
throws IOException {
File file = mkdirsmy(dir,realName);
FileUtils.copyInputStreamToFile(in, file);
return realName;
}
/**判断路径是否存在,否:创建此路径
* @param dir 文件路径
* @param realName 文件名
* @throws IOException
*/
public static File mkdirsmy(String dir, String realName) throws IOException{
File file = new File(dir, realName);
if (!file.exists()) {
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
file.createNewFile();
}
return file;
}
/**下载网络图片上传到服务器上
* @param httpUrl 图片网络地址
* @param filePath 图片保存路径
* @param myFileName 图片文件名(null时用网络图片原名)
* @return 返回图片名称
*/
public static String getHtmlPicture(String httpUrl, String filePath , String myFileName) {
URL url; //定义URL对象url
BufferedInputStream in; //定义输入字节缓冲流对象in
FileOutputStream file; //定义文件输出流对象file
try {
String fileName = null == myFileName?httpUrl.substring(httpUrl.lastIndexOf("/")).replace("/", ""):myFileName; //图片文件名(null时用网络图片原名)
url = new URL(httpUrl); //初始化url对象
in = new BufferedInputStream(url.openStream()); //初始化in对象,也就是获得url字节流
//file = new FileOutputStream(new File(filePath +"\\"+ fileName));
file
a197
= new FileOutputStream(mkdirsmy(filePath,fileName));
int t;
while ((t = in.read()) != -1) {
file.write(t);
}
file.close();
in.close();
return fileName;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
Service层的代码就不贴出来了。
多附件上传
多附件上传只是在单附件的基础上增加【multiple="multiple"】属性,后台参数接收多个附件参数就可以。具体如下:
affixFile_more.jsp
<%--
Created by IntelliJ IDEA.
User: liuying
Date: 2017/7/25
Time: 下午7:37
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!-- 下载文件 -->
<script type="text/javascript" src="static/js/sinosoft/download.js"></script>
<link rel="stylesheet" id='skin' type="text/css" href="static/js/ymPrompt/skin/qq/ymPrompt.css" />
<script type="text/javascript" src="static/js/ymPrompt/ymPrompt.js"></script>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
String FILE_REF_TAB_NAME = request.getParameter("FILE_REF_TAB_NAME");
String FILE_REF_TAB_KEY_NAME = request.getParameter("FILE_REF_TAB_KEY_NAME");
String FILE_REF_TAB_KEY_ID = request.getParameter("FILE_REF_TAB_KEY_ID");
String FILE_REF_TAB_FIELD_NAME = request.getParameter("FILE_REF_TAB_FIELD_NAME");
String KEY_ID = request.getParameter("KEY_ID");
String FILE_TYPE = request.getParameter("FILE_TYPE");
String FILE_TYPE_MESSAGE = request.getParameter("FILE_TYPE_MESSAGE");
%><base href="<%=basePath%>">
<html>
<head>
<title>附件上传</title>
<script>
/**
* 上传附件
*/
function uploadFiles(KEY_ID,FILE_REF_TAB_NAME,FILE_REF_TAB_KEY_ID,FILE_REF_TAB_KEY_NAME){
var fieldName = KEY_ID.substring(0,KEY_ID.lastIndexOf("_"));
var formData = new FormData($( "#fileForm"+KEY_ID)[0]);
formData.append("uploadFile",$("#"+KEY_ID)[0].files[0]);
formData.append("FILE_REF_TAB_FIELD_NAME",fieldName);
formData.append("FILE_REF_TAB_KEY_ID",FILE_REF_TAB_KEY_ID);
formData.append("FILE_REF_TAB_NAME",FILE_REF_TAB_NAME);
formData.append("FILE_REF_TAB_KEY_NAME",FILE_REF_TAB_KEY_NAME);
var fileInfo = $('#fileForm'+KEY_ID).find('input[class="fileInfo"]');
formData.append("fileInfo",fileInfo);
$.ajax({
url: '<%=basePath%>/fileinfo/saveMore.do',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function(data){
if("true" == data.result){
var fileTr = data.fileTr;
$('#fileInfoDiv'+KEY_ID).find("table").eq(0).append(fileTr);
}else if("false" == data.result){
var msg = data.msg;
ymPrompt.alert({title : '系统提示',message : msg});
}
}
});
}
$(function() {
//上传
$('#<%=KEY_ID %>').ace_file_input({
no_file:'请选择文件 ...',
btn_choose:'选择',
btn_change:'更改',
show_file_list:true,
droppable:false,
onchange:uploadFiles,
thumbnail:false, //| true | large
allowExt: [<%=FILE_TYPE%>],//该属性只是对文件后缀的控制
//选择文件 展示之前的事件
before_change: function (files, dropped) {
uploadFiles('<%=KEY_ID %>','<%=FILE_REF_TAB_NAME%>','<%=FILE_REF_TAB_KEY_ID%>','<%=FILE_REF_TAB_KEY_NAME %>');
return -1;
}
});
}).on('<%=KEY_ID %>', function(event, info) {
//alert("请上传<%=FILE_TYPE_MESSAGE%>格式文件","提示");
ymPrompt.alert({title : '系统提示',message : "请上传<%=FILE_TYPE_MESSAGE%>格式文件"});
});
</script>
</head>
<body>
<form id="fileForm<%=KEY_ID %>" name="fileForm" enctype="multipart/form-data">
<div class="col-sm-9">
<div id="fileInfoDiv<%=KEY_ID %>" style="cursor:pointer;">
<table>
</table>
</div>
<input type="file" id="<%=KEY_ID %>" name="uploadFile" multiple="multiple"/>
</div>
</form>
</body>
</html>
上述仅适自己项目中使用的情况,记录一下。
相关文章推荐
- 强大的java编程实现邮件发送功能,支持内容,上传多个图片和多个附件
- C# 实现 HTML+一般处理程序图片上传功能如图!
- 上传图片裁剪处理-调用android系统自带的裁剪功能
- ueditor单独图片和附件上传功能
- jsp页面附件上传暂存的处理
- jeecg中上传附件的处理
- 增加附件上传功能
- asp.net uploadify实现多附件上传功能
- springMVC + swfupload 附件上传功能的实现
- thinkphp实现附件上传功能
- Asp.net实现MVC处理文件的上传下载功能实例教程
- Jsp实现附件上传功能
- javascript实现网易邮箱多附件上传功能代码
- java附件上传功能
- 基础资料功能开发(附件上传、查看,获取当前用户信息、时间)
- 利用jsp+uploadify插件实现附件上传到ftp服务器的功能
- Spring Boot 会员管理系统之处理文件上传功能
- Asp.net实现MVC处理文件的上传下载功能实例教程
- 一分钟给fckeditor加上上传附件功能
- SSH框架上传附件及下载功能的实现