java大文件分片上传、断点续传、急速秒传( 三 )

后端部分

FileDto.JAVA 接收文件上传参数
package com.mracale.dto;import com.fasterxml.jackson.annotation.JsonFormat;import java.util.Date;public class FileDto {/*** id*/private String id;/*** 相对路径*/private String path;/*** 文件名*/private String name;/*** 后缀*/private String suffix;/*** 大小|字节B*/private Integer size;/*** 用途*/private String use;/*** 创建时间*/@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")private Date createdAt;/*** 修改时间*/@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")private Date updatedAt;private Integer shardIndex;private Integer shardSize;private Integer shardTotal;private String key;/*** base64*/private String shard;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPath() {return path;}public void setPath(String path) {this.path = path;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSuffix() {return suffix;}public void setSuffix(String suffix) {this.suffix = suffix;}public Integer getSize() {return size;}public void setSize(Integer size) {this.size = size;}public String getUse() {return use;}public void setUse(String use) {this.use = use;}public Date getCreatedAt() {return createdAt;}public void setCreatedAt(Date createdAt) {this.createdAt = createdAt;}public Date getUpdatedAt() {return updatedAt;}public void setUpdatedAt(Date updatedAt) {this.updatedAt = updatedAt;}public Integer getShardIndex() {return shardIndex;}public void setShardIndex(Integer shardIndex) {this.shardIndex = shardIndex;}public Integer getShardSize() {return shardSize;}public void setShardSize(Integer shardSize) {this.shardSize = shardSize;}public Integer getShardTotal() {return shardTotal;}public void setShardTotal(Integer shardTotal) {this.shardTotal = shardTotal;}public String getKey() {return key;}public void setKey(String key) {this.key = key;}public String getShard() {return shard;}public void setShard(String shard) {this.shard = shard;}@Overridepublic String toString() {final StringBuffer sb = new StringBuffer("FileDto{");sb.append("id='").append(id).append(''');sb.append(", path='").append(path).append(''');sb.append(", name='").append(name).append(''');sb.append(", suffix='").append(suffix).append(''');sb.append(", size=").append(size);sb.append(", use='").append(use).append(''');sb.append(", createdAt=").append(createdAt);sb.append(", updatedAt=").append(updatedAt);sb.append(", shardIndex=").append(shardIndex);sb.append(", shardSize=").append(shardSize);sb.append(", shardTotal=").append(shardTotal);sb.append(", key='").append(key).append(''');sb.append(", shard='").append(shard).append(''');sb.append('}');return sb.toString();}}ResponseDto.java 前端返回类
package com.mracale.dto;public class ResponseDto<T> {/*** 业务上的成功或失败*/private boolean success = true;/*** 返回码*/private String code;/*** 返回信息*/private String message;/*** 返回泛型数据,自定义类型*/private T content;public String getCode() {return code;}public void setCode(String code) {this.code = code;}public boolean getSuccess() {return success;}public void setSuccess(boolean success) {this.success = success;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public T getContent() {return content;}public void setContent(T content) {this.content = content;}@Overridepublic String toString() {final StringBuffer sb = new StringBuffer("ResponseDto{");sb.append("success=").append(success);sb.append(", code='").append(code).append(''');sb.append(", message='").append(message).append(''');sb.append(", content=").append(content);sb.append('}');return sb.toString();}} 
Base64ToMultipartFile.java 前端base64上传,后端接收base64转为Multipart
 
package com.mracale.util;import org.springframework.web.multipart.MultipartFile;import sun.misc.BASE64Decoder;import java.io.*;public class Base64ToMultipartFile implements MultipartFile {private final byte[] imgContent;private final String header;public Base64ToMultipartFile(byte[] imgContent, String header) {this.imgContent = imgContent;this.header = header.split(";")[0];}@Overridepublic String getName() {// TODO - implementation depends on your requirementsreturn System.currentTimeMillis() + Math.random() + "." + header.split("/")[1];}@Overridepublic String getOriginalFilename() {// TODO - implementation depends on your requirementsreturn System.currentTimeMillis() + (int) Math.random() * 10000 + "." + header.split("/")[1];}@Overridepublic String getContentType() {// TODO - implementation depends on your requirementsreturn header.split(":")[1];}@Overridepublic boolean isEmpty() {return imgContent == null || imgContent.length == 0;}@Overridepublic long getSize() {return imgContent.length;}@Overridepublic byte[] getBytes() throws IOException {return imgContent;}@Overridepublic InputStream getInputStream() throws IOException {return new ByteArrayInputStream(imgContent);}@Overridepublic void transferTo(File dest) throws IOException, IllegalStateException {new FileOutputStream(dest).write(imgContent);}public static MultipartFile base64ToMultipart(String base64) {try {String[] baseStrs = base64.split(",");BASE64Decoder decoder = new BASE64Decoder();byte[] b = new byte[0];b = decoder.decodeBuffer(baseStrs[1]);for(int i = 0; i < b.length; ++i) {if (b[i] < 0) {b[i] += 256;}}return new Base64ToMultipartFile(b, baseStrs[0]);} catch (IOException e) {e.printStackTrace();return null;}}}


推荐阅读