OkHttpClient获取文件并下载

需要调用第三方接口获取文件,本地通过网页直接下载 

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下载文件名乱码

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值