在这里用到了对文件流进行的操作,废话不多说,先贴代码出来
首先是文件上传到数据库,这里用到了SqlServer数据库,数据库对应数据类型是image,而JAVA实体则对应的是Byte[](比特数组)。
首先跟正常上传文件一样,页面上写一个form表单
<form method="post" enctype="multipart/form-data" name="frmWordDoc">
<input type="file" name="upLoadFile" >
</form>
这里是一个最简单的form表单,切记标红地方为必须.
如果用到了ntko插件提交方式则为:AwordEditor(此处为自己定义的ntko控件对象,根据自己的进行调整).SaveToURL("${pageContext.request.contextPath}/lcgl/openws?wjid=1","upLoadFile","","",0);
在javascript中添加如上代码也可进行提交。(切记是NTKO插件的提交方式)
@RequestMapping("/openws")
public void openws(Integer wjid,HttpServletRequest request,@RequestParam("upLoadFile") MultipartFile upLoadFile) throws UnsupportedEncodingException{
Pt_Wsjd ws = new Pt_Wsjd();
//下面是对文件流进行控制
InputStream inputStream;
try {
inputStream = upLoadFile.getInputStream();
byte[] data = new byte[] {};
data = inputStreamToByte(inputStream);//将文件保存到字节数组中,方法在下面
//下面就跟普通的增加方法一样,把值放到实体中
ws.setF_wsmc(bt);
ws.setF_wsnr(data);
//增加方法
lcglservice.insWs(ws);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private byte[] inputStreamToByte(InputStream is) throws IOException {
ByteArrayOutputStream bAOutputStream = new ByteArrayOutputStream();
int ch;
while((ch = is.read() ) != -1){
bAOutputStream.write(ch);
}
byte data [] =bAOutputStream.toByteArray();
bAOutputStream.close();
return data; 返回Byte[]数组
}
如此 把文件转换成进制放到数据库就搞定了。
接下来我们在做页面的回显。
@RequestMapping("/getwsbyid")
public void getWsById(Integer f_id,HttpServletResponse response,HttpSession session) throws IOException{
Pt_Wsjd ws= lcglservice.getWsById(f_id); //根据id查询一下数据库的值,非常普通的查询方法
response.reset();
response.setContentType("applcation/octet-stream"); //确定文件格式,我这里存的是一个Word文档,可根据需求自己更改。
byte[] byt =ws.getF_wsnr(); //是比特数组接受数据库的image类型的字段,也就是我们刚加到数据库的数据
java.io.InputStream fileDataStream = new ByteArrayInputStream(byt); //数据转换成文件流
javax.servlet.ServletOutputStream myOutputStream = response.getOutputStream(); //输出流
byte[] fileData = new byte[1024];
int readCount = 0 ;
while((readCount=fileDataStream.read(fileData,0,1024))!=-1){
myOutputStream.write(fileData,0,readCount);
}
myOutputStream.flush(); //刷新缓冲流
response.flushBuffer();
}
这里我还是用到了ntko的插件进行回显
ntko中的回显方式 在javascript中添加setTimeout("AwordEditor.OpenFromURL(‘${pageContext.request.contextPath}/lcgl/getwsbyid‘);",200); URL括号中对应我们刚才写的回显方法即可回显成功。
如有错误,还望各路大神直接指出,接受所有的批评与意见,如有侵权,请直接联系小编,小编会在第一时间内删除侵权内容,谢谢大家。
Qq:11032609
response.reset();
response.setContentType("applcation/octet-stream");
byte[] byt =ws.getF_wsnr();
java.io.InputStream fileDataStream = new ByteArrayInputStream(byt);
javax.servlet.ServletOutputStream myOutputStream = response.getOutputStream();
byte[] fileData = new byte[1024];
int readCount = 0 ;
while((readCount=fileDataStream.read(fileData,0,1024))!=-1){
myOutputStream.write(fileData,0,readCount);
}
myOutputStream.flush();
response.flushBuffer();
原文地址:https://www.cnblogs.com/guobao-/p/9139485.html