fileChange() {
const file = document.getElementById('file').files[0];
const formData = new FormData();
formData.append('file', file);
const timeoutPromise = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('请求超时'));
}, '9999999'); // 设置超时时间
});
const requestPromise = fetch('/api/readData/importMeterData', {
method: 'post',
body: formData
});
Promise.race([requestPromise, timeoutPromise])
.then(response => {
document.getElementById('file').value = '';
console.log(response)
if (response === 'SUCCESS'){
this.$message.success('导入成功');
}else {
this.$message.error('导入失败');
}
this.loading = false;
})
.catch(error => {
document.getElementById('file').value = '';
console.log("77777777777")
this.$message.error('导入失败');
this.loading = false;
});
},
@RequestMapping(value ="/importMeterData", method = RequestMethod.POST)
public String importAllTerminalAttribute(@RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException {
XSSFWorkbook wk = null;
try {
wk = new XSSFWorkbook(file.getInputStream());
Integer[] selectBaseCol = new Integer[]{0, 4, 5};
String[] selectBaseColName = new String[]{"meterBarcode", "freezingTime", "phaseType"};
int curCol = 8, curStep = 4, sumCur = 24;
String pattern = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
XSSFSheet sheet = wk.getSheetAt(0);
int size = sheet.getLastRowNum();
List<MeterData> list = new ArrayList<>();
for (int rowNum = 1; rowNum < size + 1; rowNum++) {
Row row = sheet.getRow(rowNum);
JSONObject json = new JSONObject();
for (int i = 0; i < selectBaseCol.length; i++) {
Cell cell = row.getCell(selectBaseCol[i]);
cell.setCellType(CellType.STRING);
json.put(selectBaseColName[i], cell.getStringCellValue());
}
for (int i = 0; i < sumCur; i++) {
MeterData meterData = JSONObject.toJavaObject(json, MeterData.class);
UUID uuid = UUID.randomUUID();
long mostSigBits = uuid.getMostSignificantBits();
long leastSigBits = uuid.getLeastSignificantBits();
long longUUID = mostSigBits ^ leastSigBits;
meterData.setId(longUUID);
Cell cell = row.getCell(i * curStep + curCol);
cell.setCellType(CellType.STRING);
String val = cell.getStringCellValue();
if (val.contains("\\N")) {
meterData.setCurrent(null);
} else {
meterData.setCurrent(val);
}
meterData.setFreezingTime(operateDate(meterData.getFreezingTime(), pattern, "HOUR", i));
//字母转换
String phType = meterData.getPhaseType();
String newPhType = "";
switch (phType) {
case "1":
newPhType = "A";
break;
case "2":
newPhType = "B";
break;
case "3":
newPhType = "C";
break;
}
meterData.setPhaseType(newPhType);
meterData.setSaveTime(sdf.format(new Date()));
list.add(meterData);
}
for (MeterData meterData : list) {
List<MeterData> existCount = meterDataRepository.findRepeatu(meterData.getMeterBarcode(), meterData.getFreezingTime(),meterData.getPhaseType());
if (existCount.size() > 0) {
for (MeterData data : existCount) {
meterDataRepository.deleteById(data.getId());
}
}
meterDataRepository.save(meterData);
}
}
return "SUCCESS";
} catch (Exception e) {
System.out.printf("导入出错:{}" + e.getMessage());
return "ERROR";
} finally {
if (wk != null) {
wk.close();
}
return "SUCCESS";
}
}
功能是导入,上述分别是,前端方法和后端方法,为什么数据都已经导入到数据库了,前端还是报404
看下总共请求了几次,如果配置了跨越,是会请求两次的
不知道你这个问题是否已经解决, 如果还没有解决的话:1、当图片未找到时或者404时,触发onerror显示其中的图片
eg:
<img src="当前图片的地址" onerror="this.src='默认图片的地址'">
2、当当前的图片未找到时,会显示默认的图片,但若是默认的图片也未找到,会引起崩溃,所以写成以下形式,这样即便默认的图片也没有找到时,会显示破裂图标。
eg:
<img src="当前图片的地址" onerror="this.onerror=''; this.src='默认图片的地址'">
3、在Vue中可以写成:
<div>
<img :src="pic" :onerror="img404">
</div>
<script>
export default {
data() {
return {
pic: '当前图片的地址',
img404: "this.onerror=''; this.src='" + require('默认的图片地址') + "'"
}
}
}
</script>