文件的上传
首选导入与文件上传相关jar包
form表单中要添加
enctype="multipart/form-data"
用post请求提交
表单代码如下:
对应方法中参数为MultipartFile[] f
参数前面可以加上注解@RequestParam(name="mf",required=false)
表示用户可以不上传文件程序也不会报错
参数中也要有HttpServletRequest来获得项目路径
1.在WebRoot下新建一个imgs/kind的文件夹来存放上传的图片
2.得到项目路径+"/imgs/kind/"
req.getSession().getServletContext().getRealPath("")+"/imgs/kind/";
3.判断f是否为空,遍历f这个数组
4.判断上传的每个文件大小是否>0
5.是的话
File iof = new File('图片存放路径'+f[i].getOriginalFilename());
6.把Spring的MultipartFile保存成java.io.File
f[i].transferTo(iof);
完整代码如下:
@RequestMapping("/aaa")
public String f1(String u1,String a1,@RequestParam(name="mf",required=false) MultipartFile[] f,HttpServletRequest req) throws IOException{
//解析后 获取 表单数据
System.out.println(this.getClass()+"日志1...u1="+u1+"\ta1="+a1+"\t上传:"+(null!=f?f.length:-1));
String directory = req.getSession().getServletContext().getRealPath("")+"/imgs/kind/";
//保存
if(null != f && f.length>0){
for (int i = 0; i < f.length; i++) {
if( f[i].getSize() > 0){
System.out.println("日志2...."+f[i].getOriginalFilename());
File iof = new File(directory+f[i].getOriginalFilename());
f[i].transferTo(iof); //spring的MultipartFile 保存成 java.io.File
}
}
}
return "test2";
}//f1()
文件的下载
返回值要为ResponseEntity
参数为HttpServletRequest也是用来获得项目路径
步骤:
1.得到下载的文件路径
//从数据库查询出对象 的资源名称 ,假如是个图片
String fileName="jia.png";
String directory = req.getSession().getServletContext().getRealPath("")+"/imgs/kind/" + fileName;
2.设置头信息
//设置下载头信息
HttpHeaders hders = new HttpHeaders();
hders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
hders.setContentDispositionFormData("attchment", fileName);
3.读取文件变成字节数组
return new ResponseEntity(FileUtils.readFileToByteArray(new File(directory)), hders, HttpStatus.CREATED) ;
国际化
写语言的配置文件
abc_en.properties
abc_ja.properties
abc_zh.properties
文件放在src下,键一样值写自己对应的语言
跳转链接
?后加上locale=代表的语言
中文
english
さつ
对应的方法跳到test2.jsp页面
@RequestMapping("/bbb")
public String f2(){
System.out.println(this.getClass() + "执行... f2()");
return "test2";
}
页面上要加
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
配置
abc_en.properties等配置文件中的语言调用通过
:
:
"/>
配置
在spring-mvc.xml中配置
还要配置绑定国际化资源文件前缀
国际化解析器
国际化拦截器
整个配置文件代码:
自定义类型转化器
继承PropertyEditorSupport类
代码如下:
package com.senchen.controller.util;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class YourConvert extends PropertyEditorSupport {
//默认支持 2010-10-10
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
@Override
public void setAsText(String text) throws IllegalArgumentException {
// text 接收到的 要转换的 字符串
System.out.println("YourConvert : 现在要转换 " + text );
Date ret = null;
try {
ret = fmt.parse( text );
} catch (ParseException e) {
fmt = new SimpleDateFormat("yyyy年MM月dd日"); //否则尝试 2010年10月10日
try {
ret = fmt.parse( text );
} catch (ParseException e1) {
fmt = new SimpleDateFormat("yyyy/MM/dd"); //否则尝试 2010/10/10
try {
ret = fmt.parse( text );
} catch (ParseException e2) {
System.out.println("以上格式都不支持");
}
}
}
super.setValue( ret );
}//setAsText()
}
加载要使用的转换器,在该方法上加注解:@InitBinder
Date.class表示碰见此类型就使用该转化器
代码如下:
@InitBinder
public void f1( WebDataBinder bind ){
System.out.println("注册类型转换器");
//注册要使用的转换器
bind.registerCustomEditor(Date.class, new YourConvert());
}
当有方法中有Date类型时会自动转换
@RequestMapping("/aaa")
public String f1(String u1 ,Date u2){
System.out.println(this.getClass()+"日志1...u1:"+u1+"\t u2:" + u2);
return "test2";
}