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';
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);
}
)
}
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();
Document doc = docBuilder.newDocument();
org.w3c.dom.Element rootElement = doc.createElement("Units");
doc.appendChild(rootElement);
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());
if (StringUtils.isNotBlank(String.valueOf(troops1.getRange()))) {
unit.setAttribute("range", String.valueOf(troops1.getRange()));
}
unitInfo.appendChild(unit);
}
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;
}