jfinal获取前端base64形式参数

前端传过来的base64形式的数据,后台controller获取不到参数

评论区

lyh061619

2017-12-15 20:17

可以获取的,base64前台js传过来有个特殊的标识,比较麻烦,以前搞过,发个码给你看看吧,
1、控制层:
public void add() {
String method = getRequest().getMethod();
if ("GET".equals(method)) {
setAttr("tab", getPara("tab"));
setAttr("labelList", labelService.list());
setAttr("categoryList", categoryService.list());
render("add.html");
} else if ("POST".equals(method)) {
try {
Product product = getBean(Product.class, "", true);
String imageFile = getPara("imagefile");
String[] imageFils = imageFile.split("\\*");
String[] imageExt = getParaValues("filetext");

for (String ss : imageFils) {
System.out.println("test=" + ss);
}

Base64Util.createDir(distPath);//在保存前处理下图片目录是否创建,如果未创建就执行创建操作
List imageList = new ArrayList<>();//回调获取保存图片文件
Base64Util.replaceBase64Image(getSellerId(), imageFils, distPath, distPath, imageList);
if (productService.add(getSeller(), product, imageList)) {
renderAjaxResultForSuccessToRedirectUrl(_SUCCESS, url);
return;
}

renderAjaxResultForError(_ERROR);
} catch (Exception e) {
renderAjaxResultForError(_ERROR);
}
}
}
2、Base64util
(1)、 /**
* 创建目录
*/
public static boolean createDir(String fileDir) {
File file = new File(fileDir);
if (!file.exists()) {
return file.mkdirs(); // 如果目录不存在则创建
}
return false;
}

(2)、 /**
* 替换html中的base64图片数据为实际图片
* @param html
* @param fileRoot 本地路径
* @param serRoot 服务器路径
* @return
*/
public static String replaceBase64Image(Integer sellerId, String html[],String fileRoot,String serRoot, List imageList){
File file = new File(fileRoot);
if(!file.exists()){//文件根目录不存在时创建
new File(fileRoot).mkdirs();
}

String htmlContent = "";
for (String hh : html) {
htmlContent = hh;
Pattern pattern = Pattern.compile("\\]*src=\"data:image/[^>]*>");
// pattern = Pattern.compile("/^data:image\\/(jpeg|png|gif);base64,/");

pattern = Pattern.compile("^data:image/(png|gif|jpg|jpeg|bmp|tif|psd|ICO);base64,.*");
Matcher matcher = pattern.matcher(hh);

while (matcher.find()) { //找出base64图片元素
String str = matcher.group();
// String src = sl.substringBetween(str, "src=\"", "\"");//src="..."
String ext = sl.sBlank(sl.substringBetween(str, "data:image/", ";"), "jpg");//图片后缀

// String base64ImgData = sl.substringBetween(str, "base64,", "\"");//图片数据
// String base64ImgData = sl.substringBetween(str, "base64,", "*");//图片数据
String base64ImgData = sl.substringBetween(str, "base64,");//图片数据
if (!sl.isEmpty(ext) && !sl.isEmpty(base64ImgData)) {
//data:image/gif;base64,base64编码的gif图片数据
//data:image/png;base64,base64编码的png图片数据
if ("jpeg".equalsIgnoreCase(ext)) {//data:image/jpeg;base64,base64编码的jpeg图片数据
ext = "jpg";
} else if ("x-icon".equalsIgnoreCase(ext)) {//data:image/x-icon;base64,base64编码的icon图片数据
ext = "ico";
}
String fileName = generateFileName(sellerId, ext); //待存储的文件名
String filePath = fileRoot + File.separator + fileName;//图片路径
try {
boolean fn = convertBase64DataToImage(base64ImgData, filePath);//转成文件
if (fn) {
imageList.add("/" + sellerId + "/" + fileName);
if (sl.isEmpty(imageList) || imageList.size() == 0) {
throw new Exception();
}
}

// String serPath = serRoot + fileName;//服务器地址
// htmlContent = htmlContent.replace(src, serPath);//替换src为服务器地址
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
return htmlContent;
}

tt520

2018-01-07 15:11

感谢分享,使用getPara()是可以获取到的, 之前是因为图片太大了导致接收不到,压缩之后再转base64传过来就可以了

热门反馈

扫码入社