记一次base64转MultipartFile的坑()

  本篇文章为你整理了记一次base64转MultipartFile的坑()的详细内容,包含有 记一次base64转MultipartFile的坑,希望能帮助你了解 记一次base64转MultipartFile的坑。

  现在有个需求是接收base64编码的图片,然后上传到文件服务器上,由于文件服务的代码是固定的代码不能修改,所以只能适配接口。文件服务代码如下:

  

@FeignClient(value = "base-files", configuration = SpringMultipartEncoder.class)

 

  public interface UploadsClient {

   @PostMapping(value = "base/file/uploads",produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},consumes = MediaType.MULTIPART_FORM_DATA_VALUE)

   Map String, Object uploads(@RequestPart(value = "files") MultipartFile[] files);

  }

 

  所以需要把base64转成对应的MultipartFile,于是在网上找到了转换的代码

  

import org.springframework.web.multipart.MultipartFile;

 

  import java.io.ByteArrayInputStream;

  import java.io.File;

  import java.io.FileOutputStream;

  import java.io.IOException;

  import java.nio.charset.StandardCharsets;

  import java.util.Base64;

   * @author Administrator

  public class Base64ToMultipartFile implements MultipartFile {

   private final byte[] fileContent;

   private final String extension;

   private final String contentType;

  
public Base64ToMultipartFile(String base64, String dataUri) {

   this.fileContent = Base64.getDecoder().decode(base64.getBytes(StandardCharsets.UTF_8));

   this.extension = dataUri.split(";")[0].split("/")[1];

   this.contentType = dataUri.split(";")[0].split(":")[1];

   public Base64ToMultipartFile(String base64, String extension, String contentType) {

   this.fileContent = Base64.getDecoder().decode(base64.getBytes(StandardCharsets.UTF_8));

   this.extension = extension;

   this.contentType = contentType;

   @Override

   public String getName() {

   return "files";

   @Override

   public String getOriginalFilename() {

   return "file_" + System.currentTimeMillis() + "." + extension;

   @Override

   public String getContentType() {

   return contentType;

   @Override

   public boolean isEmpty() {

   return fileContent == null fileContent.length == 0;

   @Override

   public long getSize() {

   return fileContent.length;

   @Override

   public byte[] getBytes() throws IOException {

   return fileContent;

   @Override

   public ByteArrayInputStream getInputStream() throws IOException {

   return new ByteArrayInputStream(fileContent);

   @Override

   public void transferTo(File file) throws IOException, IllegalStateException {

   try (FileOutputStream fos = new FileOutputStream(file)) {

   fos.write(fileContent);

  }

 

  调试了以后接口可以调通但是文件服务却接收不到文件,经过长时间的排查发现重写的Base64ToMultipartFile类的getName()方法必须返回和接收参数同名的值,即files,否则feign的接收方无法收到对应的参数。

  

Base64ToMultipartFile

 

  以上就是记一次base64转MultipartFile的坑()的详细内容,想要了解更多 记一次base64转MultipartFile的坑的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: