上传excel文件,适用于批量操作,网站就常用到
1.在jsp页面中定义input,type类型为file,同时form表单中必须定义编码类型
2.交易定义,field中使用filestyle --此处是PE框架的写法,其他框架不知道
FileStyle
3.使用普通已有模板即可 --是PE框架的写法,其他框架不知道
4.在模板调用的action中定义处理方法 --此处是PE框架的写法,其他框架不知道
5.处理方法大致如下: --下面的是共用处理方法,其他框架页可以用
//获取上传的文件,此处是PE的,其他框架应该有自己这种数据类型的
MultipartFile mf=(MultipartFile)context.getData("UploadFile");
InputStream is;
HSSFWorkbook workbook=null;
try{
is=file.getInputStream(); //使用输入流转换文件
//这个必须有,调用引入的包中的类处理流文件
POIFSFileSystem fs=new POIFSFileSystem(is);
//创建工作簿对象
workbook=new HSSFWorkbook(fs);
//获取工作表
HSSFSheet sheet=workbook.getSheetAt(0);
.......之后就是对表中的内容遍历,然后放到map(list),再放到context中
使用POI操作excel表格的方法:
//获取工作表
HSSFSheet sheet = workbook.getSheetAt(0);
//获取有效行数
int lrnum = sheet.getLastRowNum();
//获取工作表的行
HSSFRow row = sheet.getRow(j);
//获取单元格,每一小格
row.getCell()
//单元格数据类型
CELL_TYPE_NUMERIC 0数字
CELL_TYPE_STRING 1字符串
CELL_TYPE_FORMULA 2公式
CELL_TYPE_BLANK 3空格
CELL_TYPE_BOOLEAN 4布尔值
CELL_TYPE_ERROR 5错误
上传txt文件
跟上传excel差不多,不过不需要使用特殊的template,直接用以前的就好,在action中对数据进行处理,以下是简单处理的代码:
MultipartFile file=(MultipartFile) context.getData("UploadFile");
InputStream is;
try {
is = file.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
StringBuffer sb=new StringBuffer();
String s;
while((s=br.readLine())!=null )
sb.append(s+"\r");
br.close();
isr.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
上传图片
1.首先在上传的jsp页面,form表单要定义文本格式,与上传excel一样,都是multipart格式,如下:
2.上传的按钮,使用jsp的file类型,如下:
3.页面跳转时,只能使用document来跳转,不能用postData2SRV或者post2SRV方法,否则会报错
document.forms[0].action="UpLoadPictureConfirm.do";
document.forms[0].submit();
4.定义的交易,上传的数据要用filestyle来转换
FileStyle
5. 处理的类中要使用multipartfile获取数据,同时要记得引入spring的一个处理jar包,所以这个上传图片处理方法应该是公共的,其他框架也能用
MultipartFile img=(MultipartFile)context.getData("UpLoadFile");
byte[] tmp=null;
tmp=img.getBytes();
将获取的数据放到byte数组里面,转换成字节流,然后就可以插入到数据库中,注意,数据库对应字段使用的类型最好为blob,因为这个存放图片合适,且足够大
要引入的jar包:spring-webmvc-2.5.6.jar
引入的类:import org.springframework.web.multipart.MultipartFile;
从数据库中获取数据,然后把图片显示在网页中:
1.页面使用img标签,发一个请求,获取数据,返回的是一个流
2.交易的定义,调用类,但是注意,返回的不是页面,而是imgStream流,这个在http.xml文件中有定义的
imgStream,
3.在类中的处理,这里比较麻烦,不能直接用上传类处理后的btye数组,虽然这个类的作用是返回一个byte数组,字节流,但是context中传过来的不行,只能从数据库中查,然后把blob转换为byte数组传给系统类,转换为imgStream流
private byte[] blobToBytes(Blob blob) {
BufferedInputStream is = null;
try {
is = new BufferedInputStream(blob.getBinaryStream());
byte[] bytes = new byte[(int) blob.length()];
int len = bytes.length;
int offset = 0;
int read = 0;
while (offset = 0) {
offset += read;
}
return bytes;
} catch (Exception e) {
return null;
} finally {
try {
is.close();
is = null;
} catch (IOException e) {
return null;
}
}
}
4.所以一般上传图片要使用两个表,一个是临时表,上传的时候就把数据放里面,要显示了,就查数据库,要提交时,就删掉表中的数据
注意:img 中src可以跟超连接的路径,比如网址,也可以跟本地的路径,xxx/xxx
但是这个本地是指项目中的文件,不是电脑上的,也可以跟交易,返回的流
网上说可以直接使用一个方法,传入的数据必须是(Base64)String类型,但实际无效,不知道为啥: