后台代码如下:
@SuppressWarnings({ "finally", "unchecked", "null", "rawtypes" })
@RequestMapping(value = "/jhxz", produces = "application/json")
private List jhxz(HttpServletRequest request, HttpServletResponse response) throws Exception {
Map map = new HashMap();
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
File fil=null;
List<FileItem> items = null;
try {
items = upload.parseRequest(request); // 获得前台提交过来的信息,两类:文件、form表单
} catch (FileUploadException e) {
e.printStackTrace();
}
File file = new File("D://2.dat");
if (!Util.isNullOrEmpty(items)) {
Iterator<FileItem> itr = items.iterator();
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
if (item.isFormField()) {//将前台拿到的文件进行处理保存到文帝
// 是表单数据
map.put(item.getFieldName(), item.getString("utf-8"));
} else if (!"".equals(item.getName())) {// 不是form表单数据而是文件上传
fil = new File(item.getName());
map.put("name", fil.getName());
item.write(file);
}
}
}
//读取上传文件
BufferedReader br = null;
StringBuffer sb = new StringBuffer();
try {
br = new BufferedReader(new FileReader(file));
String line = null;
while((line = br.readLine())!=null){
sb.append(line);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
if(br!=null){
br.close();
}
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
fil.delete();
// System.out.println(sb.toString());
//对文件进行处理(这块可以不看)
String sbb=sb.toString();
String q1="";
for(int i=0 ; i<sbb.length();i++){
if(Character.isDigit(sbb.charAt(i))){ //用char包装类中的判断数字的方法判断每一个字符
q1=q1+sbb.charAt(i);
}
if(Character.isLetter(sbb.charAt(i))){ //用char包装类中的判断字母的方法判断每一个字符
q1=q1+sbb.charAt(i);
}
}
String s1=q1;
String s15=(String) s1.subSequence(0, 15);
String s2425=(String)s1.subSequence(23,25);
String s1728=(String)s1.subSequence(15,28);
String s28=(String)s1.subSequence(27,28);
String s2930=(String)s1.subSequence(28,30);
String total=s15+s2425+s1728+s28+s2930+“20991201”;
final BASE64Encoder encoder = new BASE64Encoder();
final byte[] textByte = total.getBytes(“UTF-8”);
//编码加密
final String encodedText = encoder.encode(textByte);
//System.out.println(encodedText);
String head=“0001000000FFFFFFFF0100000000000000060100000038”;
String end =“0B”;
String str = “”;
for (int i = 0; i < encodedText.length(); i++) {
int ch = (int) encodedText.charAt(i);
String s4 = Integer.toHexString(ch);
str = str + s4;
}
str = head + str + end;
str = str.toUpperCase();
//下载文件
//将修改的文件重新写到本地,在进行读取
ServletOutputStream sos = response.getOutputStream();
//设置客户端下载
response.setHeader("content-disposition", "attachment;filename=1.dat");
File f = new File("D:\\1.dat");
if (!f.exists()) {
f.createNewFile();
}
FileOutputStream fout = new FileOutputStream(f);
for (int i = 0; i < str.length(); i = i + 2) {
fout.write(Integer.parseInt(str.substring(i, i + 2), 16));
}
fout.close();
FileInputStream fis = new FileInputStream("D:\\1.dat");
//将图片写出到网络
ServletOutputStream sos1 = response.getOutputStream();
byte[] arr = new byte[1024];
int num = -1;
while((num = fis.read(arr)) != -1){
sos1.write(arr, 0, num);
sos1.flush();
}
fis.close();
sos1.close();
f.delete();
return null;
}
参考地址:https://blog.youkuaiyun.com/z1941563559/article/details/80546639
//如果图片的名字是中文的解决办法
//采用encode编码,第一个参数:需要编码的文本,第二个参数:指定的编码
picName = URLEncoder.encode(picName, “utf-8”);
//将图片读入内存
FileInputStream fis = new FileInputStream(imgPath);
//将图片写出到网络
ServletOutputStream sos = response.getOutputStream();
//设置客户端下载
response.setHeader("content-disposition", "attachment;filename="+picName);
byte[] arr = new byte[1024];
int num = -1;
while((num = fis.read(arr)) != -1){
sos.write(arr, 0, num);
sos.flush();
}
fis.close();
sos.close();