页面
<input type="file" id="file" style="display: inline-block"/>
<button ng-click="uploadFile()" class="btn btn-primary"
style="margin: 12px 12px" type="button" style="display: inline-block">
上传
button>
发送请求
this.uploadFile = function () {
var formData = new FormData(); //上传文件的数据模型
//参数名对应contorller中的参数名 参数内容
formData.append("uploadFile", file.files[0]); //文件上传框的id必须是和append的第二个参数一致
//多文件 file.files遍历 formData.append 追加 使用 multipart/form-data
return $http({
method : 'post', //使用post提交方式
url : "upload/upload.do", //请路径
data : formData,
headers : {'Content-Type' : undefined}, //上传文件使用undefined,默认text/plain 多文件使用 multipart/form-data
transformRequest : angular.identity //对整个表单进行二进制序列化
});
}
springBoot 使用到的坐标
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.58version>
dependency>
<dependency>
<groupId>commons-httpclientgroupId>
<artifactId>commons-httpclientartifactId>
<version>3.1version>
dependency>
<dependency>
<groupId>commons-iogroupId>
<artifactId>commons-ioartifactId>
<version>2.5version>
dependency>
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-lang3artifactId>
<version>3.9version>
dependency>
<dependency>
<groupId>org.jdomgroupId>
<artifactId>jdom2artifactId>
<version>2.0.5version>
dependency>
工具类中提取的方法
/**
*
* @param mFile 接收到的文件数组
* @param serverPath 服务器路径
* @param isSimple true 单文件上传 false 多文件上传
* @return 返回图片路径信息
* @throws IOException
*/
public static String uploadFile(MultipartFile[] mFile, String serverPath, boolean isSimple) throws IOException {
// 获取上传文件信息
//System.err.println(JSON.toJSONString(mFile)); //输出上传文件信息
String imgurl = ""; //图片路径容器
if (mFile != null && mFile.length > 0) { //如果有文件
if (isSimple) { //单文件
imgurl = handleUpload(mFile[0], serverPath); //获取
} else {
List<String> str = new ArrayList<String>();
for (MultipartFile val : mFile) {
str.add(handleUpload(val, serverPath)); //进行遍历
}
imgurl = String.join(",", str); //把字符串数组 转成以一个变量分割的字符串
}
}
return imgurl;
}
/**
* 上传原始图片
*
* @param val 文件内容 (单个)
* @param serverPath 服务器路径
* @return 图片路径
* @throws IOException
*/
public static String handleUpload(MultipartFile val, String serverPath) throws IOException {
String fileName = ""; //
if (!val.isEmpty()) { //如果文件不为空
String oldFileName = val.getOriginalFilename(); // 获取上传文件的原名
File dir = new File(serverPath); // 创建文件对象
// File parent = dest.getParentFile();
//isFile() 文件存在且是一个标准文件时,返回true;否则返回false
//exists() 当此抽象路径名表示的文件或目录存在时,返回true;否则返回false;
//dir.isDirectory() 是检查一个对象是否是文件夹 是则返回true,否则返回false。
if (!dir.exists() || !dir.isDirectory()) { // 文件或目录不存在 或 路径不是文件夹
dir.mkdirs(); //创建目录 文件夹
}
//此处2行 使用了工具类 可以自己定义命名规则
long rand = DateUtils.currentTimeMillis(); //获取当前时间戳
String date = DateUtils.getSysCurrentDay2(); //获取当前年月日
String imgType = FilenameUtils.getExtension(oldFileName); //获取图片后缀名
fileName = date + rand + "." + imgType; //拼接新的 图片名称 年月日 + 时间戳 + 图片后缀名
// System.getProperty("file.separator")
//file.separator这个代表系统目录中的间隔符 斜线 解决兼容问题 可能是单双斜杠
String newUrl = serverPath + File.separator + fileName; // 图片的路径
File newFile = new File(newUrl); //创建文件对象
// 保存文件 文件类型成了application/octet-stream 二进制了
FileUtils.copyInputStreamToFile(val.getInputStream(), newFile);
// val.transferTo(dest);
}
return fileName;
}
时间工具类
package com.example.test.util;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
/**
* 参数数组
* 0:yyyyMMdd
1:yyyy-MM-dd
2:yyyy-MM-dd HH:mm
3:yyyy-MM-dd HH:mm:ss
4:yyyy/MM/dd
* 5:yyyy/MM/dd HH:mm
6:yyyy/MM/dd HH:mm:ss
7:HH:mm:ss[时间]
8:yyyy[年份]
9:MM[月份]
* 10.dd[天]
11.E[星期几]
12.yyyyMMddHHmmss
*/
public static String[] parsePatterns = {"yyyyMMdd","yyyy-MM-dd","yyyy-MM-dd HH:mm","yyyy-MM-dd HH:mm:ss",
"yyyy/MM/dd","yyyy/MM/dd HH:mm","yyyy/MM/dd HH:mm:ss","HH:mm:ss","yyyy","MM","dd","E",
"yyyyMMddHHmmss", "MM/d/yy", "dd/MM/yyyy"};
public DateUtils() {
}
/**
* 得到当前日期字符串 格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"
* @param pattern 可参考参数组parsePatterns
*/
public static String getDate(String pattern) {
return DateFormatUtils.format(new Date(), pattern);
}
/**
* 得到日期字符串 默认格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"
* @param date 日期类
* @param pattern 可参考参数组parsePatterns
*/
public static String formatDate(Date date, Object... pattern) {
String formatDate = null;
if (pattern != null && pattern.length > 0) {
formatDate = DateFormatUtils.format(date, pattern[0].toString());
} else {
formatDate = DateFormatUtils.format(date,parsePatterns[1]);
}
return formatDate;
}
/**
* 日期型字符串转化为日期 格式
* { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" }
*/
public static Date parseDate(Object str) {
if (str == null){
return null;
}
try {
return parseDate(str.toString(), parsePatterns);
} catch (ParseException e) {
return null;
}
}
/**
* 获取过去的天数
* @param date
* @return
*/
public static long pastDays(Date date) {
long t = new Date().getTime()-date.getTime();
return t/(24*60*60*1000);
}
/**
* 获取输入日期开始时间
* @param date
* @return
*/
public static Date getDateStart(Date date) {
if(date==null) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date= sdf.parse(formatDate(date, "yyyy-MM-dd")+" 00:00:00");
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 获取输入日期结束时间
* @param date
* @return
*/
public static Date getDateEnd(Date date) {
if(date==null) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date= sdf.parse(formatDate(date, "yyyy-MM-dd") +" 23:59:59");
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 按输入日期加分钟
* @param date 日期
* @param recordPeriodMinute 分钟数
* @return
*/
public static Date addMinutes(Date recordTime, int recordPeriodMinute) {
Calendar c = Calendar.getInstance();
c.setTime(recordTime);
c.add(Calendar.MINUTE, recordPeriodMinute);
return c.getTime();
}
/**
* 按输入日期加毫秒
* @param date 日期
* @param recordPeriodSecond 毫秒数
* @return
*/
public static Date addSeconds(Date recordTime, int recordPeriodSecond) {
Calendar c = Calendar.getInstance();
c.setTime(recordTime);
c.add(Calendar.SECOND, recordPeriodSecond);
return c.getTime();
}
/**
* 校验日期是否合法
* @param date 日期
* @return
*/
public static boolean isValidDate(String date) {
DateFormat fmt = new SimpleDateFormat(parsePatterns[1]);
try {
fmt.parse(date);
return true;
} catch (Exception e) {
// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
return false;
}
}
/**
* 时间相减得到相差年数
* @param startTime 开始日期
* @param endTime 结束日期
* @return
*/
public static int getDiffYear(String startTime,String endTime) {
DateFormat fmt = new SimpleDateFormat(parsePatterns[1]);
try {
int years=(int) (((fmt.parse(endTime).getTime()-fmt.parse(startTime).getTime())/ (1000 * 60 * 60 * 24))/365);
return years;
} catch (Exception e) {
e.printStackTrace();
// 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
return 0;
}
}
/**
* 功能描述:时间相减得到天数
* @param startTime 开始日期
* @param endTime 结束日期
* @return
*/
public static long getDaySub(String startTime,String endTime){
long day=0;
SimpleDateFormat format = new SimpleDateFormat(parsePatterns[1]);
Date beginDate = null;
Date endDate = null;
try {
beginDate = format.parse(startTime);
endDate= format.parse(endTime);
} catch (ParseException e) {
e.printStackTrace();
}
day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000);
return day;
}
/**
* 得到n天之后的日期
* @param days
* @return
*/
public static String getAfterDayDate(String days) {
int daysInt = Integer.parseInt(days);
Calendar canlendar = Calendar.getInstance();
canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
Date date = canlendar.getTime();
SimpleDateFormat sdfd = new SimpleDateFormat((parsePatterns[3]));
String dateStr = sdfd.format(date);
return dateStr;
}
/**
* 得到n天之后是周几
* @param days
* @return
*/
public static String getAfterDayWeek(String days) {
int daysInt = Integer.parseInt(days);
Calendar canlendar = Calendar.getInstance();
canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
Date date = canlendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat(parsePatterns[11]);
String dateStr = sdf.format(date);
return dateStr;
}
/**
* 把时间根据时、分、秒转换为时间段
* @param Object 可选其1值{ "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm" }
* @author String ?日前或?小时前或?分钟前?秒前
*/
public static String getTimes(Object str){
String resultTimes = "";
Date now;
Date date=parseDate(str);
now = new Date();
long times = now.getTime() - date.getTime();
long day = times / (24 * 60 * 60 * 1000);
long hour = (times / (60 * 60 * 1000) - day * 24);
long min = ((times / (60 * 1000)) - day * 24 * 60 - hour * 60);
long sec = (times / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
StringBuffer sb = new StringBuffer();
if(day>0){
sb.append(day + "日前");
}else if (hour > 0) {
sb.append(hour + "小时前");
} else if (min > 0) {
sb.append(min + "分钟前");
} else if (sec >0){
sb.append(sec + "秒前");
}else if(times>=0){
sb.append(times + "毫秒前");
}else{
sb.append("超前毫秒数:"+times);
}
resultTimes = sb.toString();
return resultTimes;
}
/**
* 将微信消息中的CreateTime转换成标准格式的时间Date
* @param createTime 消息创建时间
* @return
*/
public static Date formatTime(long createTime) {
long msgCreateTime =createTime*1000L;
return new Date(msgCreateTime);
}
public static Date parse(String dateString, String formatString) {
SimpleDateFormat df = new SimpleDateFormat(formatString);
try {
return df.parse(dateString);
} catch (ParseException e) {
return null;
}
}
/**
* 给定日期增加一天
* @param date
* @param value
* @return
*/
public static Date addDay(Date date, int value) {
Calendar now = Calendar.getInstance();
now.setTime(date);
now.add(Calendar.DAY_OF_YEAR, value);
return now.getTime();
}
/**
* 将字符串转换成为date
* @param Patten
* @param str
* @return
*/
private static Date strToDate(String Patten, String str) {
Date date = null;
SimpleDateFormat format = null;
format = new SimpleDateFormat(Patten);
try {
date = format.parse(str);
} catch (ParseException e) {
System.out.println("strToDateParseException::>>" + e.toString());
} catch (Exception e) {
System.out.println("strToDatePException::>>" + e.toString());
}
return date;
}
/**
* 将时间转换成为字符串
* @param Patten
* @param date
* @return
*/
private static String dateToStr(String Patten, Date date) {
String str = null;
SimpleDateFormat format = null;
format = new SimpleDateFormat(Patten);
try {
str = format.format(date);
} catch (Exception e) {
System.out.println("dateToStrPException::>>" + e.toString());
}
return str;
}
/**
* 将以秒为单位的时间转换为字符串
* @param datetime
* @return
*/
public static String datetimeToStr(Date datetime) {
return dateToStr("yyyy-MM-dd HH:mm:ss", datetime);
}
/**
* 将日期转换成为以天为单位的时间
* @param day
* @return
*/
public static String dayToStr(Date day) {
if (day == null){
return "";
}
return dateToStr("yyyy-MM-dd", day);
}
/**
* 将以天为单位的时间转换为字符转
* @param str
* @return
*/
public static Date strToDay(String str) {
return strToDate("yyyy-MM-dd", str);
}
/**
* 格式化时间
* 单位天
* @param str
* @return
*/
public static String dateFormat(String str){
return dayToStr(strToDay(str));
}
/**
* 将以秒为单位的字符转换成为时间
* @param str
* @return
*/
public static Date strToTime(String str) {
return strToDate("yyyy-MM-dd HH:mm:ss", str);
}
/**
* 得到当前时间,以年为单位
* @return
*/
public static String getSysCurrentYear() {
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy");
String strDate = df.format(now);
return strDate;
}
/**
* 得到当前时间,以月为单位
* @return
*/
public static String getSysCurrentMonth() {
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM");
String strDate = df.format(now);
return strDate;
}
public static String getSysCurrentMonth2() {
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyyMM");
String strDate = df.format(now);
return strDate;
}
/**
* 得到当前时间,以天为单位
* @return
*/
public static String getSysCurrentDay() {
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String strDate = df.format(now);
return strDate;
}
public static String getSysCurrentDay2() {
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
String strDate = df.format(now);
return strDate;
}
public static String getSysCurrentDay3() {
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("dd");
String strDate = df.format(now);
return strDate;
}
/**
* 得到当前时间,以小时为单位
* @return
*/
public static String getSysCurrentHours() {
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH");
String strDate = df.format(now);
return strDate;
}
public static String getSysCurrentH() {
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("HH");
String strDate = df.format(now);
return strDate;
}
/**
* 得到当前时间,以秒为单位
* @return
*/
public static String getSysCurAllTime() {
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = df.format(now);
return strDate;
}
public static String getSysCurAllTime2() {
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String strDate = df.format(now);
return strDate;
}
public static String getSysCurAllTime3() {
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String strDate = df.format(now);
return strDate;
}
/**
* 得到当前时间
* @return
*/
public static String getSysCurrentTime() {
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
String strDate = df.format(now);
return strDate;
}
/**
* 当前日期加减天数,days为正表示加days天,为负表示减days天
* @param days
* @return
* @throws Exception
*/
public static String convertAddDay(int days) throws Exception {
String str = getSysCurrentDay();
Date dt = strToDate("yyyy-MM-dd", str);
Calendar current = Calendar.getInstance();
current.setTime(dt);
current.add(Calendar.DATE, days);
Date dt1 = current.getTime();
return dateToStr("yyyy-MM-dd", dt1);
}
/**
* 指定日期加上指定天数
* @param date
* @param days
* @return
* @throws Exception
*/
public static String convertAddDay(String date, int days) throws Exception {
Date dt = strToDate("yyyy-MM-dd", date);
Calendar current = Calendar.getInstance();
current.setTime(dt);
current.add(Calendar.DATE, days);
Date dt1 = current.getTime();
return dateToStr("yyyy-MM-dd", dt1);
}
/**
* 当前时间加减小时,hours为正表示加hours小时,为负表示减hours小时
* @param hours
* @return
* @throws Exception
*/
public static String convertAddHours(int hours) throws Exception {
String str = getSysCurrentHours();
Date dt = strToDate("yyyy-MM-dd HH", str);
Calendar current = Calendar.getInstance();
current.setTime(dt);
current.add(Calendar.HOUR, hours);
Date dt1 = current.getTime();
return dateToStr("yyyy-MM-dd HH", dt1);
}
/**
* 返回系统当前时间戳(以毫秒为单位)
*
* @return
* @throws Exception
*/
public static long currentTimeMillis() {
return System.currentTimeMillis(); //返回当前时间戳
}
/**
* 计算两个时间之间的差值,单位:毫秒;第二个时间大于第一个时间正值
* @param strdate1 第一个时间
* @param strdate2 第二个时间
* @param Patten 是个格式化参数
* @return
* @throws Exception
*/
public static long dateSubtraction(String strdate1, String strdate2, String Patten) {
Date date1 = strToDate(Patten,strdate1);
Date date2 = strToDate(Patten,strdate2);
long diff = date2.getTime()-date1.getTime();
return diff;
}
public static boolean dateInTimes(String tdate, String date1, String date2, String patten){
return dateSubtraction(date1,tdate,patten)>=0 && dateSubtraction(tdate,date2,patten)>=0;
}
/**
* 计算两个时间相差的天数
* @param strdate1
* @param strdate2
* @return
* @throws Exception
*/
public static long daySubtraction(String strdate1, String strdate2) throws Exception {
long times = dateSubtraction(strdate1,strdate2,"yyyy-MM-dd");
long diff = (times/1000/60/60/24);
return diff;
}
public static int getAge(String birthday) {
String now = getSysCurrentDay();
int age = 0;
try {
long days = daySubtraction(birthday, now);
double n = days/365.2422;
age = (int) Math.ceil(n);
} catch (Exception e) {
e.printStackTrace();
}
return age;
}
/**
* 将时间字符串转换为毫秒
* @param datetime
* @return
*/
public static long datestrToMill(String datetime) {
long millionSeconds = 0;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
millionSeconds = sdf.parse(datetime).getTime();//毫秒
} catch (Exception e) {
System.out.println("datestrToMillException::>>" + e.toString());
}
return millionSeconds;
}
/**
* 将毫秒转换为指定格式的日期
* @param mill
* @return
*/
public static String convertMillToDate(long mill){
Date date = new Date(mill);
SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sfd.format(date);
}
public static String getTimeEquationFormat(String endtime, String starttime) throws Exception {
int second=getTimeEquation(endtime,starttime);
return getSecond(second);
}
/**
* 求时差
* @param endtime
* @param starttime
* @return 返回相差的秒数
* @throws Exception
*/
public static int getTimeEquation(String endtime, String starttime) throws Exception {
Date d1=strToDate("yyyy-MM-dd HH:mm:ss",starttime);
Date d2=strToDate("yyyy-MM-dd HH:mm:ss",endtime);
int time_c=Integer.valueOf((d2.getTime()-d1.getTime())/1000+"");
return time_c;
}
/**
* 将秒数转换为以 DD hh:mm:ss 的形式
* @param second
* @return
* @throws Exception
*/
public static String getSecondToDate(int second) throws Exception {
//剩余时间
int lave=0;
int d=0;
int h=0;
int m=0;
int s=0;
//计算天
d=second/(24*3600);
lave=second-d*24*3600;
h=lave/3600;
lave=lave-h*3600;
m=lave/60;
lave=lave-m*60;
s=lave;
return d+" "+h+":"+m+":"+s;
}
public static String getSecond(int second) throws Exception {
//剩余时间
int lave=0;
int d=0;
int h=0;
int m=0;
int s=0;
//计算天
d=second/(24*3600);
lave=second-d*24*3600;
h=lave/3600;
lave=lave-h*3600;
m=lave/60;
lave=lave-m*60;
s=lave;
return d+"天"+h+"小时"+m+"分"+s+"秒";
}
public static List<String> getLastDays(int day) {
List<String> list = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
list.add(sdf.format(calendar.getTime()));
for(int i=day-1;i>0;i--){
calendar.add(Calendar.DATE, -1);
list.add(sdf.format(calendar.getTime()));
}
Collections.reverse(list);
return list;
}
public static List<Date> findDates(Date dBegin, Date dEnd)
{
List lDate = new ArrayList();
lDate.add(dBegin);
Calendar calBegin = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calBegin.setTime(dBegin);
Calendar calEnd = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calEnd.setTime(dEnd);
// 测试此日期是否在指定日期之后
while (dEnd.after(calBegin.getTime())){
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
calBegin.add(Calendar.DAY_OF_MONTH, 1);
lDate.add(calBegin.getTime());
}
return lDate;
}
/**
* 根据给定年数,返回N年前日期
* @Title: getYearsOld
* @Description: TODO
* @param nYears
* @return
* @return String 返回类型
*/
public static String getNYearsOldDateStr(int nYears) {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.YEAR, -nYears);
String day = DateUtils.dayToStr(cal.getTime());
return day;
}
public static void main(String[] args) throws Exception {
System.out.println(getAge("1969-01-29"));
// BufferedReader br = null;
// BufferedWriter bw = null;
// br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("F:/gps/2.log"))));
// bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("F:/gps/3.txt"))));
// String str = null;
// try {
// while ((str = br.readLine()) != null) {
// String[] dd = str.split(",");
// if(dd.length>0){
// bw.write(dd[3]+"\t"+dd[2]);
// bw.newLine();
// }
// }
// bw.flush();
// } catch (Exception e) {
// e.printStackTrace();
// }
}
}
xml解析工具类 包含微信部分
package com.example.test.util;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.xml.sax.InputSource;
import java.io.StringReader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class XMLUtil {
/**
* description: 解析微信通知xml
*
* @param xml
* @return
* @author ex_yangxiaoyi
* @see
*/
@SuppressWarnings({ "unused", "rawtypes", "unchecked" })
public static Map parseXmlToList(String xml) {
Map retMap = new HashMap();
try {
StringReader read = new StringReader(xml);
// 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
// 创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();
// 通过输入源构造一个Document
Document doc = (Document) sb.build(source);
Element root = doc.getRootElement();// 指向根节点
List<Element> es = root.getChildren();
if (es != null && es.size() != 0) {
for (Element element : es) {
retMap.put(element.getName(), element.getValue());
}
}
} catch (Exception e) {
e.printStackTrace();
}
return retMap;
}
}
此方法中用到的上传图片的工具类
package com.example.test.util;
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.util.StringUtil;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ZTools {
public static Map getMwebUrl(String url, String xmlParam) {
String jsonStr = null;
HttpClient httpClient = new HttpClient();
Map map = new HashMap();
try {
PostMethod method = null;
RequestEntity reqEntity = new StringRequestEntity(xmlParam, "text/json", "UTF-8");
method = new PostMethod(url);
method.setRequestEntity(reqEntity);
method.addRequestHeader("Content-Type", "application/json;charset=utf-8");
httpClient.executeMethod(method);
StringBuffer resBodyBuf = new StringBuffer();
byte[] responseBody = new byte[1024];
int readCount = 0;
BufferedInputStream is = new BufferedInputStream(method.getResponseBodyAsStream());
while ((readCount = is.read(responseBody, 0, responseBody.length)) != -1) {
resBodyBuf.append(new String(responseBody, 0, readCount, "utf-8"));
}
jsonStr = resBodyBuf.toString();
System.out.println(jsonStr);
map = XMLUtil.parseXmlToList(jsonStr);
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
/**
* 获取用户实际ip
*
* @param request
* @return
*/
public static String getIpAddr(HttpServletRequest request) {
String ipAddress = request.getHeader("x-forwarded-for");
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) {
// 根据网卡取本机配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ipAddress = inet.getHostAddress();
}
}
// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length() = 15
if (ipAddress.indexOf(",") > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
}
}
return ipAddress;
}
/* 文件删除 */
public static void deleteFile(String fileOldname, String serverPath) {
try {
if (StringUtil.isNotEmpty(fileOldname)) {
File oldFile = new File(serverPath + File.separator + fileOldname);
if (oldFile.exists() && oldFile.isFile()) {
oldFile.delete();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @param mFile 接收到的文件数组
* @param serverPath 服务器路径
* @param isSimple true 单文件上传 false 多文件上传
* @return 返回图片路径信息
* @throws IOException
*/
public static String uploadFile(MultipartFile[] mFile, String serverPath, boolean isSimple) throws IOException {
// 获取上传文件信息
//System.err.println(JSON.toJSONString(mFile)); //输出上传文件信息
String imgurl = ""; //图片路径容器
if (mFile != null && mFile.length > 0) { //如果有文件
if (isSimple) { //单文件
imgurl = handleUpload(mFile[0], serverPath); //获取
} else {
List<String> str = new ArrayList<String>();
for (MultipartFile val : mFile) {
str.add(handleUpload(val, serverPath)); //进行遍历
}
imgurl = String.join(",", str); //把字符串数组 转成以一个变量分割的字符串
}
}
return imgurl;
}
/**
* 上传原始图片
*
* @param val 文件内容 (单个)
* @param serverPath 服务器路径
* @return 图片路径
* @throws IOException
*/
public static String handleUpload(MultipartFile val, String serverPath) throws IOException {
String fileName = ""; //
if (!val.isEmpty()) { //如果文件不为空
String oldFileName = val.getOriginalFilename(); // 获取上传文件的原名
File dir = new File(serverPath); // 创建文件对象
// File parent = dest.getParentFile();
//isFile() 文件存在且是一个标准文件时,返回true;否则返回false
//exists() 当此抽象路径名表示的文件或目录存在时,返回true;否则返回false;
//dir.isDirectory() 是检查一个对象是否是文件夹 是则返回true,否则返回false。
if (!dir.exists() || !dir.isDirectory()) { // 文件或目录不存在 或 路径不是文件夹
dir.mkdirs(); //创建目录 文件夹
}
long rand = DateUtils.currentTimeMillis(); //获取当前时间戳
String date = DateUtils.getSysCurrentDay2(); //获取当前年月日
String imgType = FilenameUtils.getExtension(oldFileName); //获取图片后缀名
fileName = date + rand + "." + imgType; //拼接新的 图片名称 年月日 + 时间戳 + 图片后缀名
// System.getProperty("file.separator")
//file.separator这个代表系统目录中的间隔符 斜线 解决兼容问题 可能是单双斜杠
String newUrl = serverPath + File.separator + fileName; // 图片的路径
File newFile = new File(newUrl); //创建文件对象
// 保存文件 文件类型成了application/octet-stream 二进制了
FileUtils.copyInputStreamToFile(val.getInputStream(), newFile);
// val.transferTo(dest);
}
return fileName;
}
/**
* 对字节数组字符串进行Base64解码并生成图片
*
* @Title: Base64ToImage
* @param imgStr
* base64字符串
* @param imgFilePath
* 保存路径
* @return String 返回类型
*/
public static String Base64ToImage(String imgStr, String imgFilePath) {
if (StringUtil.isEmpty(imgStr)) // 图像数据为空
return null;
long rand = DateUtils.currentTimeMillis();
String date = DateUtils.getSysCurrentDay2();
String fileName = date + rand + ".jpeg";
// System.getProperty("file.separator")
String newUrl = imgFilePath + File.separator + fileName;
BASE64Decoder decoder = new BASE64Decoder();
try {
// Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 调整异常数据
b[i] += 256;
}
}
OutputStream out = new FileOutputStream(newUrl);
out.write(b);
out.flush();
out.close();
return fileName;
} catch (Exception e) {
return null;
}
}
/**
* @Description: 根据图片地址转换为base64编码字符串
* @Author:
* @CreateTime:
* @return
*/
public static String getImageBase64Str(String imgFile) {
InputStream inputStream = null;
byte[] data = null;
try {
inputStream = new FileInputStream(imgFile);
data = new byte[inputStream.available()];
inputStream.read(data);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// 加密
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);
}
public static void main(String[] args) {
// System.err.println(getImageBase64Str("C:\\Users\\13911\\Pictures\\Camera Roll\\jinGong.jpg"));
System.err.println(getImageBase64Str("C:\\Users\\13911\\Pictures\\Camera Roll\\jinGong.jpg"));
}
}