EasyExcel 导出文件上传服务器 multipartBody
EasyExcel 导出的文件App端不能处理 OutputStream时,需要上传服务器后,在将路径返回前端。
1、EasyExcel 导出时 ByteArrayOutputStream 接收
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
EasyExcel.write(byteArrayOutputStream, CentralizedExportVO.class)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.sheet()
.doWrite(data);
fileUrl = fileService.upLoad(byteArrayOutputStream, "导出文件中文名称", fileNameStr);
2、在将 ByteArrayOutputStream 写入到 MultipartBody 中,在借助 OkHttpClient上传一下。
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.util.UriUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
/**
* 文件处理实现类
* @author naixin.zhang
* Date 2023/10/24 10:12
*/
@Slf4j
@Service
public class FileService {
@Value("${上传服务器地址}")
private String goFastUrl;
private final OkHttpClient okHttpClient = new OkHttpClient();
/**
* 上传文件
* @param byteArrayOutputStream 输出流
* @param chainName 替换需转移中文名字
* @param fileNameStr 文件全名
* @return
*/
public String upLoad(ByteArrayOutputStream byteArrayOutputStream, String chainName, String fileNameStr){
String fileUrl = "";
MultipartBody multipartBody;
try {
multipartBody = new MultipartBody.Builder().
setType(MultipartBody.FORM)
.addFormDataPart("file", fileNameStr,
RequestBody.create(MediaType.parse("multipart/form-data;charset=utf-8"),
byteArrayOutputStream.toByteArray()))
.addFormDataPart("output", "json")
.build();
} catch (Exception e) {
log.error("upload file error", e);
return null;
}
Request request = new Request.Builder()
.url(goFastUrl)
.post(multipartBody)
.build();
try (Response response = okHttpClient.newCall(request).execute()) {
if (!response.isSuccessful()) {
return null;
}
ResponseBody body = response.body();
if (body == null) {
return null;
}
String result = body.string();
if (StringUtils.isNotEmpty(result)) {
JSONObject bodyJson = JSONObject.parseObject(result);
log.debug("上传文件返回对象 ->{}", bodyJson.toJSONString());
String url = bodyJson.getString("url");
log.info("导出文件路径 ->{}", url);
// 转义中文路径
String exportFileName = UriUtils.encode(chainName, "UTF-8");
// 中文路径替换成转义后的中文路径
fileUrl = url.replaceAll(chainName, exportFileName);
}
} catch (IOException e) {
log.warn("upload file error", e);
return null;
}
return fileUrl;
}
}
希望能帮助到大家!