java返回文件流和返回Json混用
java返回⽂件流和返回Json混⽤
遇到⼀个需求,前端上传Excel⽂件,后端校验校验不通过直接返回并下载带有失败信息的Excel⽂件,如果是其他情况则返回相应的Json 提⽰信息。
前后端⽤于处理Java上传⽂件后成功和失败返回Json信息,校验失败放回⽂件流并下载。
⼀个接⼝兼顾Json返回和⽂件流返回
1、vue前端请求处理:
// 封装axios的下载数据流转换成excel
export function DownLoadToExcel(url, data = {}, fileName) {
fileName = fileName + '.xls'
return new Promise((resolve, reject) => {
axios
.post(url, data, {
// 必须设置不然Excel下载后打不开
responseType: 'blob',
dataType: 'json',
headers: { 'Content-Type': 'application/json; application/vnd.ms-excel' }
})
.then(response => {
resolve(response)
})
.catch(error => {
console.log(error)
reject(error)
})
})
}
2、前端上传附件⽅法处理:
uploads() {
let formdata = new FormData()
formdata.append('file', this.file)
this.loadingStatus = true
this.$http.DownLoadToExcel(this.uploadUrl, formdata, this.file.name).then(res => {
const resData = res.data
如何写情书let that = this
/
/ 处理返回是Json的数据
if (pe === 'application/json') {
// 说明是普通对象数据,读取信息
const fileReader = new FileReader()
debugger
try {
const jsonData = JSON.sult)
// 后台信息
console.log(jsonData)
debugger
if (de === 200) {
debugger
that.tips.class = this.tips.successClass
ssage = '⽂件导⼊成功!'
that.$emit('fileUploadSuccess')
} else {
that.tips.class = that.tips.failClass
ssage = ssage
}
} catch (err) {
console.log(err)
}
}
} else {
// 校验错误时直接下载校验错误Excel
const blob = new Blob([res.data], {
type: 'application/vnd.ms-excel'
})
if ('download' ateElement('a')) {
// ⾮IE下载
const elink = ateElement('a')
elink.download = this.file.name
elink.style.display = 'none'
elink.href = ateObjectURL(blob)
广东大学排行document.body.appendChild(elink)
elink.click()梦见死人又复活
veChild(elink)
} else {
// IE10+下载
navigator.msSaveBlob(blob, this.file.name)
}
this.file = null
}
}).catch(err => {
console.log(err)
})
}
3、后端
@PostMapping("wikipediaImportData")
@ApiOperation("百科excel导⼊")
JsonResponse<Map<String, Object>> wikipediaExportData(@RequestParam("file") MultipartFile file, HttpServletResponse response){
JsonResponse<Map<String, Object>> jonResponse = JsonResponse.ok();
String fileName = OriginalFilename();
// 校验格式
if (!(fileName != null && (dsWith(".xlsx") || dsWith(".xls")))) {
夫妻共同财产
jonResponse.setCode(RequestStatus.de);
jonResponse.setMessage(RequestStatus.ssage);
jonResponse.setSuccess(false);
}
拍拍你怎么弄文字
/ 这⾥得设置返回请求信息
response.setContentType("application/json;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
ExcelReader reader = adBuilder()
.
head(WikipediaExcelDTO.class)
.build();
try {
AnalyzedResult<WikipediaExcelDTO> result = InputStream());
switch (RStatus()) {
case SUCCESS:
List<WikipediaExcelDTO> dataList = DataList();
List<BaseResourceDTO> baseResourceDTOList = dataList.stream().map(data -> {
BaseResourceDTO resourceDTO = new BaseResourceDTO();
return resourceDTO;
}).List());
indexService.syncResource(baseResourceDTOList);
jonResponse.setCode(de);
jonResponse.setMessage(ssage);
jonResponse.setSuccess(true);
break;
case DATA_FAILED:
// 数据校验出错时候直接返回错误⽂件流
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");
try {
response.setHeader("Content-disposition", "attachment;filename=" + de(fileName, "UTF-8") + ".xlsx");            } catch (UnsupportedEncodingException var3) {
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");航天员在太空喝水
}
// ExcelUtil.writeExcelResponseHeader(response, fileName);
.CellList())
.head(WikipediaExcelDTO.class)
.build()
.OutputStream());
jonResponse.setCode(RequestStatus.de);
jonResponse.setMessage(RequestStatus.ssage);
jonResponse.setSuccess(false);
break;
case HEAD_FAILED:
jonResponse.setCode(RequestStatus.de);
jonResponse.setMessage(RequestStatus.ssage);
jonResponse.setSuccess(false);
break;
case ERROR:
jonResponse.setCode(de);
jonResponse.setMessage(ssage);
jonResponse.setSuccess(false);
break;
default:
jonResponse.RStatus().getCode());
jonResponse.RStatus().getCode());
jonResponse.RStatus().getMessage());            jonResponse.setSuccess(false);
break;
}
} catch (Exception e) {
<("百科导⼊⽂件错误");
jonResponse.setCode(de);
jonResponse.setMessage(ssage);
jonResponse.setSuccess(false);
}
return jonResponse;
}
返回失败的Json
下载⽂件:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。