vue+springboot实现文件下载
vue+springboot实现文件下载
·
vue前端代码
<a-button type="primary" style="margin-left: 50px" @click="exportConfigures()">导出配置文件</a-button>
exportConfigures(){
if (this.selectedRows.length==0) {
alert("请至少选择一条数据");
return
}else if(this.selectedRows.length>1){
alert("只能选择一条数据");
return
}
const arr =[];
console.log(this.selectedRows);
this.selectedRows.forEach(p=>{
arr.push(p.id);
});
axios({
url:'http://localhost:8000/ConfiguresInfo/Configures/exportFigure',
method:'post',
data:arr,
headers:{'Content-Type':'application/json'},
responseType: 'blob'
}).then(
response => {
const link = document.createElement('a');
console.log('请求成功了', response.data);
let blob=new Blob([response.data.data], {
type: "application/xml;charset=utf-8"
});
link.style.display='none';
// 兼容不同浏览器的URL对象
const url = window.URL || window.webkitURL || window.moxURL;
link.href=url.createObjectURL(blob);
console.log(this.selectedRows[0].name);
link.setAttribute('download',this.selectedRows[0].name+'.xml');
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
url.revokeObjectURL(link.href);//销毁url对象
}
)
}
springboot后端代码
@ApiOperation(value = "导出文件",produces = "application/octet-stream")
@PostMapping("/exportFigure")
public ResponseEntity<byte[]> exportConfigure(@RequestBody List<Integer> arr, HttpServletResponse response) throws Exception {
HashMap map = new HashMap();
arr.forEach(p-> System.out.println("p = " + p));
List<ConfiguresEntiry> configuresEntiries = configureService.listByIds(arr);
ConfiguresEntiry configuresEntiry = configuresEntiries.get(0);
if (CollectionUtils.isNotEmpty(configuresEntiries)) {
List<Troops> troops = JSON.parseArray(configuresEntiry.getTroops(), Troops.class);
configuresEntiry.setArr(troops);
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
// 创建XML文档对象
Document doc = docBuilder.newDocument();
org.w3c.dom.Element rootElement = doc.createElement("Units");
doc.appendChild(rootElement);
// 创建UnitInfo元素
Element unitInfo = doc.createElement("UnitInfo");
rootElement.appendChild(unitInfo);
for (Troops troops1 : configuresEntiry.getArr()) {
Element unit = doc.createElement("Unit");
unit.setAttribute("name", troops1.getUnitname());
// 设置其他属性
unit.setAttribute("iconDir", troops1.getIcon());
unit.setAttribute("type", troops1.getType());
unit.setAttribute("step", troops1.getNumber().toString());
unit.setAttribute("dllName", troops1.getConnect());
//unit.setAttribute("camp", attributes[i][3]);
// 非所有单位都有range属性,只给有range的单位设置
if (StringUtils.isNotBlank(String.valueOf(troops1.getRange()))) {
unit.setAttribute("range", String.valueOf(troops1.getRange()));
}
unitInfo.appendChild(unit);
}
// 将XML文档写入文件或输出流(这里仅做字符串格式化输出)
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StringWriter writer = new StringWriter();
File file = new File("D:\\"+configuresEntiry.getName()+".xml");
StreamResult result = new StreamResult(file);
transformer.transform(source, result);
writer.close();
}
File file = new File("D:\\"+configuresEntiry.getName()+".xml");
String name = file.getName();
FileInputStream fileInputStream = new FileInputStream(file);
byte[] bytes = new byte[(int) file.length()];
fileInputStream.read(bytes);
fileInputStream.close();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", name = java.net.URLEncoder.encode(file.getName(), "UTF-8"));
ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(Files.toByteArray(file), headers, HttpStatus.CREATED);
return responseEntity;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)