From 6fb149ae1870fd68c7965b2d57989b252b005423 Mon Sep 17 00:00:00 2001 From: limqhz Date: Fri, 31 Jan 2020 22:37:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=8A=E4=BC=A0=E7=85=A7?= =?UTF-8?q?=E7=89=87=E6=B5=81=E5=85=B3=E9=97=AD=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sv/service/api/MemberService.java | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/service/src/main/java/com/sv/service/api/MemberService.java b/service/src/main/java/com/sv/service/api/MemberService.java index 8abe63b..5deba98 100644 --- a/service/src/main/java/com/sv/service/api/MemberService.java +++ b/service/src/main/java/com/sv/service/api/MemberService.java @@ -31,9 +31,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; import java.math.BigDecimal; import java.util.Date; import java.util.regex.Matcher; @@ -499,16 +497,14 @@ public class MemberService extends BaseServiceImpl { InputStream inputStream = null; try { inputStream = file.getInputStream(); - byte[] byt = new byte[inputStream.available()]; - inputStream.read(byt); Member member = memberMapper.findById(memberId); if (member != null) { - String imgUrl = ossClientUtil.uploadImg(new ByteArrayInputStream(byt), file.getOriginalFilename()); + String imgUrl = ossClientUtil.uploadImg(new BufferedInputStream(inputStream), file.getOriginalFilename()); logger.info(memberId + "上传oss文件成功." + imgUrl); Integer subjectId = null; if (faceService.login()){ - Integer faceId = faceService.uploadFace(new ByteArrayInputStream(byt)); - byt = null; + ByteArrayInputStream byteArrayInputStream = getByteArrayInputStream(file); + Integer faceId = faceService.uploadFace(byteArrayInputStream); subjectId = faceService.addSubject(faceId, member); logger.info(faceId + "&&" + subjectId); } @@ -534,6 +530,34 @@ public class MemberService extends BaseServiceImpl { } } + // 将文件中流转换为字节数组,通过缓存数据的方式转换防止内存溢出 + private ByteArrayInputStream getByteArrayInputStream(MultipartFile file) { + ByteArrayInputStream result = null; + InputStream in = null; + ByteArrayOutputStream bao = null; + try{ + in = file.getInputStream(); + byte[] buff = new byte[2048]; + int temp = 0; + bao = new ByteArrayOutputStream(); + while((temp = in.read(buff)) != -1) { + bao.write(buff, 0, temp); + } + byte[] data = bao.toByteArray(); + result = new ByteArrayInputStream(data); + }catch (Exception e){ + return null; + }finally { + try { + in.close(); + bao.close(); + } catch (IOException e) { + // do nothing + } + } + return result; + } + /** * 通过人脸识别的faceID获取用户 *