上代码吧:
第一步,先建个对象:
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
@ApiModel("文件上传")
public class UploadFileByBase64Dto {
@NotBlank(message = "上传信息不能为空")
@ApiModelProperty("编码后的base64信息")
String attachContent;
@ApiModelProperty("文件类型 01图片 02语音 03视频")
String attachType;
}
第二步,写个controller:
@PostMapping(value = "/uploadFileBase64ByParam")
@ApiOperation(value = "base64上传文件", notes = "base64上传文件,RequestParam方式接收", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "attachContent", value = "编码后的base64信息", required = true, paramType = "query"),
@ApiImplicitParam(name = "attachType", value = "文件类型 01图片 02语音 03视频", required = true, paramType = "query"),
})
public String uploadFileByParam(){
Map<String, Object> params = this.getParams();
if (params == null || StringUtils.isBlank((String) params.get("attachContent"))){
return this.responseJson(ResultUtil.error("参数缺失"),null,null);
}
String attachContent = params.get("attachContent").toString();
String attachType = StringUtils.isBlank((String) params.get("attachType")) ? null : params.get("attachType").toString();
UploadFileByBase64Dto uploadFileByBase64Dto = new UploadFileByBase64Dto();
uploadFileByBase64Dto.setAttachContent(attachContent);
uploadFileByBase64Dto.setAttachType(attachType);
log.info("文件类型入参:"+attachType);
log.info("base64信息入参:"+attachContent);
return this.responseJson(xxxxxService.uploadFileByBase64(uploadFileByBase64Dto), null, null);
}
第三步,service略了;
第四步,serviceImpl代码:
/**
* 文件上传(base64)
*
* @param uploadFileByBase64Dto
* @return
*/
@Override
public ResultUtil uploadFileByBase64(UploadFileByBase64Dto uploadFileByBase64Dto) {
return saveUploadFile(Base64DecodedMultipartFile.base64ToMultipart(uploadFileByBase64Dto.getAttachContent()));
}
private ResultUtil saveUploadFile(MultipartFile file) {
if (Objects.isNull(file)) {
return ResultUtil.error("未获取到文件!");
}
// 获取图片的文件名
String fileName = file.getOriginalFilename();
// 获取图片的扩展名
String extensionName = fileName.substring(fileName.indexOf("."));
// 新的图片文件名 = 获取UUID+图片扩展名
String newFileName = (UUID.randomUUID().toString().replaceAll("-", "")) + extensionName;
File dest = new File(path, newFileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
Map<String, Object> result = new HashMap<>();
result.put("url", dest.getPath());
//上传到指定目录
try {
file.transferTo(dest);
//增加逻辑:如果是silk音频格式,需要调用服务器ffmpeg插件转换成mp3
if(".silk".equals(extensionName)){
String shellScript= shellScriptPath + " "+dest.getPath()+" " + silkFormat;
Process ps = Runtime.getRuntime().exec(shellScript);
ps.waitFor();
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
String shellResult = sb.toString();
logger.debug(shellResult);
br.close();
result.put("url", dest.getPath().replace(".silk",".mp3"));
return ResultUtil.ok(result);
}
} catch (IllegalStateException | IOException | InterruptedException e) {
logger.error("上传文件接口执行文件保存出现异常:", e);
return ResultUtil.error("文件保存异常!");
}
result.put("url", dest.getPath());
return ResultUtil.ok(result);
}
第五步,补充个工具类Base64DecodedMultipartFile:
package com.xxxx.micro.common.util;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import lombok.extern.slf4j.Slf4j;
import sun.misc.BASE64Decoder;
@Slf4j
public class Base64DecodedMultipartFile implements MultipartFile {
private final byte[] imgContent;
private final String header;
public Base64DecodedMultipartFile(byte[] imgContent, String header) {
this.imgContent = imgContent;
this.header = header.split(";")[0];
}
@Override
public String getName() {
// TODO - implementation depends on your requirements
return System.currentTimeMillis() + Math.random() + "." + header.split("/")[1];
}
@Override
public String getOriginalFilename() {
// TODO - implementation depends on your requirements
return System.currentTimeMillis() + (int)Math.random() * 10000 + "." + header.split("/")[1];
}
@Override
public String getContentType() {
// TODO - implementation depends on your requirements
return header.split(":")[1];
}
@Override
public boolean isEmpty() {
return imgContent == null || imgContent.length == 0;
}
@Override
public long getSize() {
return imgContent.length;
}
@Override
public byte[] getBytes() {
return imgContent;
}
@Override
public InputStream getInputStream() {
return new ByteArrayInputStream(imgContent);
}
@Override
public void transferTo(File dest) throws IOException, IllegalStateException {
FileOutputStream out = null;
try {
out = new FileOutputStream(dest);
out.write(imgContent);
out.close();
} catch (Exception e) {
log.error("transferTos:{}",e);
}finally {
if(null!=out) {
try{
out.flush();
}catch(Exception e){
}
try{
out.close();
}catch(Exception e){
}
}
}
}
public static MultipartFile base64ToMultipart(String base64) {
try {
String[] baseStrs = base64.split(",");
BASE64Decoder decoder = new BASE64Decoder();
byte[] b;
log.info("**baseStrs长度:"+baseStrs.length+ "***base64ToMultipart信息:"+baseStrs);
b = decoder.decodeBuffer(baseStrs[1]);
log.info("byte[]--b信息:"+b);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
return new Base64DecodedMultipartFile(b, baseStrs[0]);
} catch (IOException e) {
log.error("transferTo:{}",e);
return null;
}
}
/**
* 文件转base64字符串
* @param filePath
* @return
*/
public static String encryptToBase64(String filePath) {
if (filePath == null) {
return null;
}
try {
byte[] b = Files.readAllBytes(Paths.get(filePath));
return org.apache.commons.codec.binary.Base64.encodeBase64String(b);
} catch (IOException e) {
log.error("encryptToBase64:{}",e);
}
return null;
}
}
第六步,需要说明一点,前端传的base64文件流格式,前面的传参attachContent中的值:data:image/jpg;base64,一定要带着,不然后端不知道转成什么文件格式的,代码也会报错。
attachContent的值如下
data:image/jpg;base64,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
补充一点:一个很奇怪的问题,在前端将图片转为base64后,字符串是正常的,可是post请求到后台,发现base64字符串里的"+"号被替换为空格,导致图片保存后,打开失败,无法查看。
问题就是,前端将字符串里的"+"号字符转换一下就好
data.replace(/+/g,"%2B");