一般的office的厂家会提供多种产品的集成方式,这里介绍的是使用js集成office插件;作为一个入职3个月的小白,碰巧公司让我研究一下这个第三方产品,主要完成数据库表bolb文件下载与使用该office文件修改后的上传,本人在此把这些分享给大家,不足之处大家包涵!!!
1.这个便是厂家提供的js方法
DeepLink App
安卓/苹果 DeepLinks(URL Schemas) 适用
其实主要就是2个方法,一个就是关于创建新的文档,一个是打开一个已经存在文档;
主要就是这两个属性:word.downloadURL与word.uploadURL
word.downloadURL是一个下载文件的url;word.downloadURL则是负责文件上传url;实现这两个url的上传下载;
package Servlet;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* Servlet implementation class UpServlet
*/
public class FileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public FileServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
String filename = request.getParameter("filename");// 下载的文件名
String flag = request.getParameter("flag");// 区分上传下载参数
String tName = request.getParameter("tName");// 操作的表名
String DM_CODE = request.getParameter("DM_CODE");// 表的主键
String clumName = request.getParameter("clumName");// blob数据的列名
if (flag.equalsIgnoreCase("UP")) {
upfile(request, response, tName, DM_CODE, clumName, filename);
}
if (flag.equalsIgnoreCase("DOWN")) {
downfile(request, response, tName, DM_CODE, clumName, filename);
}
if (flag.equalsIgnoreCase("UPDATE")) {
updateFile(request, response, tName, DM_CODE, clumName);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
public void updateFile(HttpServletRequest request, HttpServletResponse response, String tName, String DM_CODE,
String clumName) throws ServletException, IOException {
InputStream in = null;
Connection conn = null;
InputStream indata = null;
PreparedStatement pst = null;
try {
// 解析http请求
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
// 解析成功
if (isMultipart == true) {
// 获得磁盘文件条目工厂
FileItemFactory factory = new DiskFileItemFactory();
// 高水平的API文件上传处理,将文件保存在服务器硬盘
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传的单个文件的大小100M
upload.setSizeMax(100 * 1024 * 1024);
// 设置上传的总文件的大小100M
upload.setFileSizeMax(100 * 1024 * 1024);
List fileItemList = upload.parseRequest(request);
// 如果表单内容不为空
if (fileItemList != null) {
// 遍历请求内容
for (FileItem fileItem : fileItemList) {
if (fileItem.getFieldName().equalsIgnoreCase("fileUpload")) {
in = fileItem.getInputStream();
byte[] buffer = new byte[in.available()];
indata = getServletContext().getResourceAsStream("/WEB-INF/datebase.properties");
Properties props = new Properties();
try {
props.load(indata);
} catch (IOException e) {
e.printStackTrace();
return;
}
String driver = props.getProperty("db.driver");
String URL = props.getProperty("db.url");
String USER = props.getProperty("db.username");
String PASSWORD = props.getProperty("db.password");
// 1.加载驱动程序
Class.forName(driver);
// 2.获得数据库链接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
String s = "update " + tName + " set " + clumName + "=? where DM_CODE=" + DM_CODE;
pst = conn.prepareStatement(s);
pst.setBinaryStream(1, in, buffer.length);
pst.execute();
fileItem.delete();
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(indata!=null){
indata.close();}
if(pst!=null){
pst.close();}
if(conn!=null){
conn.close();}
if(in!=null){
in.close();}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
protected void downfile(HttpServletRequest request, HttpServletResponse response, String tName, String DM_CODE,
String clumName, String filename) throws ServletException, IOException {
InputStream indata = null;
Connection conn = null;
PreparedStatement pst = null;
ServletOutputStream out = null;
InputStream ins = null;
try {
out = response.getOutputStream();
response.reset();
response.setContentType("application/msword;charset=GBK");
indata = getServletContext().getResourceAsStream("/WEB-INF/datebase.properties");
Properties props = new Properties();
try {
props.load(indata);
} catch (IOException e) {
e.printStackTrace();
return;
}
String driver = props.getProperty("db.driver");
String URL = props.getProperty("db.url");
String USER = props.getProperty("db.username");
String PASSWORD = props.getProperty("db.password");
// 1.加载驱动程序
Class.forName(driver);
// 2.获得数据库链接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
if (tName.equals("RD_FILE")) {
String sql = "select " + clumName + ",FILENAME from " + tName + " where DM_CODE=" + DM_CODE + "";
pst = conn.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
if (rs.next()) {
java.sql.Blob blob = rs.getBlob(clumName);
ins = blob.getBinaryStream();
String fname=rs.getString("FILENAME");
response.setHeader("Content-Disposition", "attachement;filename=" + fname + ";");
// 下面将BLOB数据写入文件
byte[] b = new byte[1024];
int len = 0;
while ((len = ins.read(b)) != -1) {
out.write(b, 0, len);
}
}
} else {
String sql = "select " + clumName + " from " + tName + " where DM_CODE=" + DM_CODE + "";
pst = conn.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
if (rs.next()) {
java.sql.Blob blob = rs.getBlob(clumName);
ins = blob.getBinaryStream();
response.setHeader("Content-Disposition", "attachement;filename=" + filename + ";");
// 下面将BLOB数据写入文件
byte[] b = new byte[1024];
int len = 0;
while ((len = ins.read(b)) != -1) {
out.write(b, 0, len);
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
indata.close();
ins.close();
out.flush();
out.close();
try {
pst.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void upfile(HttpServletRequest request, HttpServletResponse response, String tName, String DM_CODE,
String clumName, String filename) throws ServletException, IOException {
InputStream in = null;
Connection conn = null;
InputStream indata = null;
PreparedStatement pst = null;
try {
// 解析http请求
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
// 解析成功
if (isMultipart == true) {
// 获得磁盘文件条目工厂
FileItemFactory factory = new DiskFileItemFactory();
// 高水平的API文件上传处理,将文件保存在服务器硬盘
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传的单个文件的大小100M
upload.setSizeMax(100 * 1024 * 1024);
// 设置上传的总文件的大小100M
upload.setFileSizeMax(100 * 1024 * 1024);
List fileItemList = upload.parseRequest(request);
if (fileItemList != null) {
// 遍历请求内容
for (FileItem fileItem : fileItemList) {
if (fileItem.getFieldName().equalsIgnoreCase("fileUpload")) {
in = fileItem.getInputStream();
byte[] buffer = new byte[in.available()];
indata = getServletContext().getResourceAsStream("/WEB-INF/datebase.properties");
Properties props = new Properties();
try {
props.load(indata);
} catch (IOException e) {
e.printStackTrace();
return;
}
String driver = props.getProperty("db.driver");
String URL = props.getProperty("db.url");
String USER = props.getProperty("db.username");
String PASSWORD = props.getProperty("db.password");
// 1.加载驱动程序
Class.forName(driver);
// 2.获得数据库链接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
// 如果操作的表为RD_FILE,则需修改sql
String s;
if (tName.equals("RD_FILE")) {
String filetype = filename.split("\\.")[1];
s = "insert into " + tName + "(DM_CODE," + clumName + ",RD_TYPE,FILENAME) values('"
+ DM_CODE + "',?,'" + filetype + "','" + filename + "')";
} else {
s = "insert into " + tName + "(DM_CODE," + clumName + ") values(" + DM_CODE + ",?)";
}
pst = conn.prepareStatement(s);
pst.setBinaryStream(1, in, buffer.length);
pst.execute();
fileItem.delete();
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
indata.close();
pst.close();
conn.close();
in.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3.配置servlet把2个访问地址传入相应url即可;