记录一个简单的业务逻辑,将base64格式的文件转成本地文件,把文件名做为id,文件绝对路径做为路径存入数据库,当用户传id的时候直接调用数据库下载这个图片,返回结果为byte[]。
这篇是记录工作中一个简单的逻辑:
1.将base64格式的文件转成本地文件,把文件名做为id,文件绝对路径做为路径存入数据库,当用户传id的时候直接调用数据库下载这个图片,返回结果为byte[]。
base64转图片存本地代码:
Base64Util base64Util = new Base64Util(); // 读取配置文件 String path = AlertMessageManger.class.getClassLoader().getResource("config.properties").getPath();//config.properties配置的是文件要保存的路径 FileInputStream in; in = new FileInputStream(path); Properties prop = new Properties(); prop.load(in); // 得到配置文件中的本地路径 String imagePath = prop.getProperty("path"); // 雪花算法生成唯一id SnowFlakeUtil snowFlake = new SnowFlakeUtil(2, 3); long randomNumber18 = snowFlake.nextId();// 18位唯一id map.put("file_id", randomNumber18); imagePath +="/"+ randomNumber18 + ".jpg";// 本地路径+18位唯一id+后缀
base64Util.generateImage(alarm_image_data, imagePath);// base64转文件存到本地 map.put("imagePath", imagePath);
jArray.add(map);
String sql = insertSQL(map);//调用插入数据库的方法把数据插入数据库
executeSql(connection, statement, sql);
图片下载的controller代码:
@SuppressWarnings("static-access")
@RequestMapping(value = "/download", method = RequestMethod.GET, produces = "application/json;charset=utf8")
public void fileDownload(@RequestParam(value = "file_id", required = false) String file_id,
@RequestParam(value = "image_size", required = false) String image_size,
@RequestParam(value = "image_type", required = false) String image_type, HttpSession session,
HttpServletResponse response) {
Object[] sessidRet = getSessionId(session);
JdbcUtil jdbcUtil = new JdbcUtil();
String sql = null;
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
String msg = null;
if (file_id == null || "".equals(file_id)) {
msg = createResultJson(2, "file_id参数不能为空!");
}
if (image_size == null || "".equals(image_size)) {
msg = createResultJson(2, "image_size参数不能为空!");
}
if (!image_size.equals("1") && !image_size.equals("2")) {
msg = createResultJson(2, "image_size值只能为1或者2");
}
if (image_type == null || "".equals(image_type)) {
msg = createResultJson(2, "image_type参数不能为空!");
}
if (!image_type.equals("1") && !image_type.equals("2") && !image_type.equals("3")) {
msg = createResultJson(2, "image_type值只能为1或者2或者3");
}
try {
OutputStream out;
if (msg != null) {
response.reset();
response.setHeader("Content-type", "text/html;charset=UTF-8");
out = response.getOutputStream();
out.write(msg.getBytes("UTF-8"));
out.close();
return;
}
// DowloadFileContent dfc = fileManageService.downloadFile(file_id, sessid);
long time1 = System.currentTimeMillis();
sql = "select 数据库 where file_id=" + file_id;
logger.info("待执行的SQL:" + sql);
connection = jdbcUtil.getConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);
long time2 = 0;
while (resultSet.next()) {
String casefile_id = resultSet.getString("file_id");
byte[] b = null;
if (casefile_id != null) {
b = service.downloadSH(file_id, image_type, image_size);
long time_ = System.currentTimeMillis();
logger.info("SH下载耗时=" + (time_ - time1));
}if (b == null) {
msg = createResultJson(1, "文件不存在,文件下载失败!");
response.setHeader("Content-type", "text/html;charset=UTF-8");
out = response.getOutputStream();
out.write(msg.getBytes("UTF-8"));
out.close();
return;
} else {
response.reset();
out = response.getOutputStream();
out.write(b, 0, b.length);
out.close();
long time3 = System.currentTimeMillis();
logger.info("写流耗时=" + (time3 - time2));
return;
}
}
} catch (Exception e) {
logger.error("文件下载失败", e);
msg = createResultJson(1, "文件下载失败!");
} finally {
try {
jdbcUtil.CloseConnection(connection, statement, resultSet);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
service代码:
@SuppressWarnings("static-access")
@Override
public byte[] downloadSH(String fileID, String imagetype, String imagesize) throws Exception {
if (fileID != null) {
String sql = null;
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
JdbcUtil jdbcUtil = new JdbcUtil();
sql = "select imagePath from 数据库 where 1=1 and file_id=" + fileID;
try {
connection = jdbcUtil.getConnection();
statement = connection.createStatement();
resultSet = statement.executeQuery(sql);// 这里是执行SQL语句查询结果并返回结果集
String imagePath = null;
while (resultSet.next()) {
imagePath = resultSet.getString("imagePath");
}
return InputStream2ByteArray(imagePath);
} catch (Exception e) {
e.printStackTrace();
System.err.println("发生异常情况,导致失败,请重试...........");
} finally {
jdbcUtil.CloseConnection(connection, statement, resultSet);
}
}
return null;
}
//读取本地图片转化成byte[]
public byte[] InputStream2ByteArray(String filePath) throws IOException {
InputStream in = new FileInputStream(filePath);
byte[] data = toByteArray(in);
in.close();
return data;
}
public byte[] toByteArray(InputStream in) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024 * 4];
int n = 0;
while ((n = in.read(buffer)) != -1) {
out.write(buffer, 0, n);
}
return out.toByteArray();
}

浙公网安备 33010602011771号