@Before(Tx.class)//jfinal的事物注解
public void saveTeachingResearch() {
Integer status = null;
String result = null;
Integer activityId = null;
String activity_name = null;// 活动名称
String begin_time = null;// 开始时间
String end_time = null;// 结束时间
String activity_add = null;// 活动地址
String activity_add_code = null;// 活动行政区划
String activity_stages = null;// 学段
String activity_grade = null;// 学年
Integer activity_subject = null;// 学科
Integer hours = null;// 学时
String comment = null; // 说明
// 创建一个临时文件存放要上传的文件,第一个参数为上传文件大小,第二个参数为存放的临时目录
String tempPath = getRequest().getSession().getServletContext().getRealPath("/upload/temp");
DiskFileItemFactory factory = new DiskFileItemFactory(1024 * 1024 * 5, new File(tempPath));
// 设置缓冲区大小为 5M
factory.setSizeThreshold(1024 * 1024 * 5);
// 创建一个文件上传的句柄
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传文件的整个大小和上传的单个文件大小
upload.setSizeMax(1024 * 1024 * 50);
upload.setFileSizeMax(1024 * 1024 * 5);
try { // 把页面表单中的每一个表单元素解析成一个FileItem
StringBuilder img_urls = new StringBuilder();//图片路径字符串数组
List<FileItem> items = upload.parseRequest(getRequest());
for (FileItem fileItem : items) {
// 如果是一个普通的表单元素(type不是file的表单元素)
if (fileItem.isFormField()) {
// 得到表单元素的名字
if (fileItem.getFieldName().equals("activityId")) {
// 得到表单元素的值
activityId = Integer.valueOf(fileItem.getString());
}
if (fileItem.getFieldName().equals("activity_name")) {
activity_name = base64Decode(fileItem.getString());//这里加密是因为ios传输的中文字符串为乱码,所以约定他传参前base64加密,接受参数一方解密
}
if (fileItem.getFieldName().equals("begin_time")) {
begin_time = fileItem.getString();
}
if (fileItem.getFieldName().equals("end_time")) {
end_time = fileItem.getString();
}
if (fileItem.getFieldName().equals("activity_add")) {
activity_add = base64Decode(fileItem.getString());
}
if (fileItem.getFieldName().equals("activity_add_code")) {
activity_add_code = fileItem.getString();
}
if (fileItem.getFieldName().equals("activity_stages")) {
activity_stages = fileItem.getString();
}
if (fileItem.getFieldName().equals("activity_grade")) {
activity_grade = base64Decode(fileItem.getString());
}
if (fileItem.getFieldName().equals("activity_subject")) {
activity_subject = Integer.valueOf(fileItem.getString());
}
if (fileItem.getFieldName().equals("hours")) {
hours = Integer.valueOf(fileItem.getString());
}
if (fileItem.getFieldName().equals("comment")) {
comment = base64Decode(fileItem.getString());
}
} else {
// 得到文件的名字
String fileName = fileItem.getName();
// 将文件上传到项目的upload/mobile/img/目录并命名,getRealPath可以得到该web项目下包含/upload/mobile/img/的绝对路径
String path = getRequest().getSession().getServletContext().getRealPath("/upload/mobile/img");
File saveFile = new File(path);
// 判断目录是否存在
if (!saveFile.exists()) {
// 创建图片存放目录
saveFile.mkdirs();
}
String saveFileName = UUID.randomUUID().toString().replace("-", "").toUpperCase() + ".png";
try {
if (activityId > 0) {
// 先删除掉数据库记录的图片,再保存新图片
String imgPath = TeachingResearch.dao.findById(activityId).getStr("img_urls");
if (imgPath != null && imgPath.length() > 0) {
String[] imgArray = imgPath.split(",");
if (imgArray != null && imgArray.length > 0) {
for (String imgpath : imgArray) {
File file = new File(path + "/" + imgpath.substring(30));
// 路径为文件且不为空则进行删除
if (file.isFile() && file.exists()) {
file.delete();
}
}
}
}
}
// 将新图片写入指定目录
fileItem.write(new File(path + "/" + saveFileName));
} catch (Exception e) {
e.printStackTrace();
status = 1;
result = "保存失败!";
}
img_urls.append("/gyeducation/upload/mobile/img/" + saveFileName);
img_urls.append(",");
}
}
// 去除最后一个逗号
if (img_urls != null && img_urls.length() > 0) {
img_urls.deleteCharAt(img_urls.length() - 1);
}
TeachingResearch research = null;
if (activityId == 0) {
research = new TeachingResearch();
research.set("activity_name", activity_name);
research.set("begin_time", begin_time);
research.set("end_time", end_time);
research.set("activity_add", activity_add);
research.set("activity_add_code", activity_add_code);
research.set("activity_stages", activity_stages);
research.set("activity_grade", activity_grade);
research.set("activity_subject", activity_subject);
research.set("state", 0);
research.set("comment", comment);
research.set("img_urls", img_urls.toString());
research.set("is_signout", 0);
research.set("hours", hours);
research.set("rec_time", new Date());
research.set("rec_person", getCurrentMember().getID());
research.set("is_del", 0);// 未删除
research.save();
} else {
research = TeachingResearch.dao.findById(activityId);
research.set("activity_name", activity_name);
research.set("begin_time", begin_time);
research.set("end_time", end_time);
research.set("activity_add", activity_add);
research.set("activity_add_code", activity_add_code);
research.set("activity_stages", activity_stages);
research.set("activity_grade", activity_grade);
research.set("activity_subject", activity_subject);
research.set("state", 0);
research.set("comment", comment);
research.set("img_urls", img_urls.toString());
research.set("is_signout", 0);
research.set("hours", hours);
research.set("rec_time", new Date());
research.set("rec_person", getCurrentMember().getID());
research.update();
}
status = 0;
result = "保存成功!";
} catch (FileUploadBase.SizeLimitExceededException e) {
status = 1;
result = "整个请求的大小超过了规定的大小...";
} catch (FileUploadBase.FileSizeLimitExceededException e) {
status = 1;
result = "请求中一个上传文件的大小超过了规定的大小...";
} catch (FileUploadException e) {
e.printStackTrace();
status = 1;
result = "保存失败!";
}
setAttr("status", status);// 设置返回状态码
setAttr("result", result);// 设置返回信息
returnJson();
}
/**
* Base64解密
*
* @param s
* @return
*/
public static String base64Decode(String s) {
byte[] b = null;
String result = null;
if (s != null) {
BASE64Decoder decoder = new BASE64Decoder();
try {
b = decoder.decodeBuffer(s);
result = new String(b, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}