需要调用第三方接口获取文件,本地通过网页直接下载
public Result doExcelExport(String repoId, HttpServletResponse response) {
try {
if (StringUtils.isBlank(token) || StringUtils.isBlank(uid)) {
if (!this.loginRepository()) {
return Result.failure("问答库登录失败,请重试");
}
}
LambdaQueryWrapper<PlatformRepository> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(PlatformRepository::getRepositoryId,repoId);
PlatformRepository auth = this.getOne(wrapper);
// 校验是否有当前问答库权限
if (auth == null || auth.getUserId() != StpUtil.getLoginIdAsLong()) {
return Result.failure("无权限");
}
String url = URL_TEST + "xxxxxx";
OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("repoId", repoId)
.build();
Long timestamp = System.currentTimeMillis();
Request request = new Request.Builder()
.url(url)
.addHeader("from", CommonConst.FROM)
.addHeader("timestamp", timestamp.toString())
.post(requestBody)
.build();
Response result = client.newCall(request).execute();
if (MediaType.parse("application/vnd.ms-excel;charset=UTF-8").equals(result.body().contentType())) {
try (InputStream inputStream = result.body().byteStream()) {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while( (len = inputStream.read(buffer)) != -1 ){
outStream.write(buffer, 0, len);
}
byte[] bufferByte = outStream.toByteArray();
inputStream.read(bufferByte);
// 清空response
response.reset();
// 设置response的Header
String fileName = StringUtils.isNotBlank(auth.getRepositoryName())?auth.getRepositoryName():auth.getRepositoryId();
response.addHeader("Content-Disposition", "attachment;filename=" +
new String((fileName + ".xlsx").getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));//处理中文乱码
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(bufferByte);
toClient.flush();
toClient.close();
} catch (Exception e) {
logger.error("导出问答对异常" + e);
return Result.failure("导出问答对失败");
}
} else if (MediaType.parse("text/json;charset=UTF-8").equals(result.body().contentType())) {
String responseData = result.body().string();
ResponseInfo jsonData = JSONObject.parseObject(responseData, ResponseInfo.class);
}
return Result.success("导出成功");
} catch (Exception e) {
e.printStackTrace();
logger.error("导出问答对异常" + e);
}
return Result.failure("导出问答对失败");
}
chrome下载文件名乱码