是个小的知识点,但因为一个小细节浪费了大半天的时间才弄好,
@ResponseBody
@RequestMapping("/upLoadJdjdImage")publicModelMap upLoadJdjdImage(HttpServletResponse response, ModelMap model,@RequestBody String jsonString){
String code= "", msg= "";boolean success= false;try{
String json= URLDecoder.decode(jsonString, "utf-8");
JSONObject jsonObj= newJSONObject(json);
String photo= jsonObj.getString("photo");
我这边是用java service接收到android端的照片,照片格式为用base64处理的二进制图片,按照一般的思路就是直接接收后,生成一个图片文件,
然后用流写进数据,
/**上传照片*/
public String upload(String photo, HttpServletResponse response, String savePath) {
response.setContentType("text/html");
BufferedOutputStream bos = null;
File newFile = null;
String fileName="";
try {
File file= new File(savePath);
if(!file.exists()){//判断路径下是否有此文件
file.mkdir();//创建此抽象路径名指定的目录。
}
if(photo.length()>0){
byte [] by= null;
BASE64Decoder base64= new BASE64Decoder();
by= base64.decodeBuffer(photo);
String newPath= savePath +"\\" + System.currentTimeMillis() + ".jpg";
newFile= new File(newPath);
bos= new BufferedOutputStream(new FileOutputStream(newFile));
bos.write(by);
bos.flush();
fileName=newFile.getName();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if (bos != null) {
try {
bos.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
return fileName;
}
然而,看了下路径下面写出的图片,居然是纯黑的,这个服务中也没有异常抛出,在网上查了其他的图片写法,基本上都是一致这样写的
图片,然后就很懵逼了,后面问了前辈才了解到,这样接收的二进制数据还需要对字符进行处理
String json= URLDecoder.decode(jsonString, "utf-8");
JSONObject jsonObj= new JSONObject(json);
String photo= jsonObj.getString("photo");
photo= photo.replace("data:image/png;base64", "");
photo= photo.replaceAll("data:image/jpeg;base64", "");
photo= photo.replace(" ", "+");//替换空字符串为+
photo= photo.replace("\n", ""); //置空换行符
photo= photo.replace("\t", "");
photo= photo.replace("\r", "");
//photo= photo.replace("/", ""); //过虑转义符
需要替换部分特殊字符,这应该算是一个比较冷的小知识点了,这边记录一下,希望可以帮助后面的同学,最后附属php二进制图片数据
的处理
function Img($str,$imgName=null)//base64 生成图片保存
{
if( $imgName ){
unlink(ROOT_PATH.'/public/uploads/'.$imgName); //删除原图
}
$saveName = request()->time() .rand_string(4). '.jpg'; //图片名生成
$str = str_replace(' ', '+', $str); //替换空字符串为+
$str = str_replace('\n', '',$str); //置空换行符
$str = str_replace('\t', '',$str);
$str = str_replace('\r', '',$str);
$str = stripslashes($str); //过虑转义符
$str = str_replace('data:image/jpeg;base64,', '', $str);
$str = str_replace('data:image/png;base64,', '', $str);
$img = base64_decode($str); //解码
file_put_contents(ROOT_PATH . '/public/uploads/' . $saveName,$img); //保存图片
$img_url = '/uploads/'.$saveName; //生成图片保存路径
return $img_url;
}