HTML代码:
隐藏文件上传标签,点击上传按钮调用JS中的importGoodsStore()方法。
<button class="btn m-b-xs btn-primary m-r-sm" data-ng-click="importGoodsStore()">上传</button>
<input type="file" data-ng-model="file" name="file" onchange="angular.element(this).scope().fileChangeEvent()" id="file" style="display:none">
JS代码:
调用importGoodsStore()方法,执行HTML中id为file的点击方法,上传读取文件传入后台等待返回,返回无论对错清空file文件,使之可以进行二次上传。
//上传
$scope.importGoodsStore=function(){
var value=document.getElementById("file").click();
}
//上传实现
$scope.fileChangeEvent=function () {
//判断上传控件的选定是否为空,空则返回
if (document.getElementById("file").files.length == 0) return;
var fileObj = document.getElementById("file").files[0];
// 上传的路径
var FileController=$scope.url + "open/goods/importGoods;
var form = new FormData();
form.append("file", fileObj);
var xhr = new XMLHttpRequest();
xhr.open("post", FileController, true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
// 上传成功提示,清空file
var file = $("#file");
file.after(file.clone().val(""));
file.remove();
}
};
xhr.send(form);
}
Java后端代码:
读取文件中的内容,并保存到对象中。
提示:读取文件中单元格是以第一行中单元格名称读取。
/**
* 导入商品
*
* @param file 上传的文件
* @param request
* @return 上传结果
* @date 2018年4月23日
* @since 1.1.13
*/
@SuppressWarnings("resource")
@RequestMapping(value = "open/goods/importGoods", method = RequestMethod.POST)
@ResponseBody
public Object importGoodsStore(@RequestParam(value = "file", required = false) MultipartFile file,
MultipartHttpServletRequest request) {
try {
// 读取上传的文件
CommonsMultipartFile cf = (CommonsMultipartFile) file;
DiskFileItem fi = (DiskFileItem) cf.getFileItem();
InputStream inputStream = fi.getInputStream();
Workbook wb = null;
wb = new XSSFWorkbook(inputStream);// 解析xlsx格式
Sheet rs = wb.getSheetAt(0);
if (rs != null) {
// 创建集合list
List<UploadQUERY> uploadQUERYList = new ArrayList<>();
String storeCode = "";
Row rowZero = rs.getRow(0);
Map<String,Integer> map = new HashMap<String,Integer>();
for (int i = 0; i < rowZero.getLastCellNum() ; i++) {
rowZero.getCell(i).setCellType(CellType.STRING);
map.put(rowZero.getCell(i).toString(),i);
}
//获取Excel中的数据
try {
int sum = rs.getLastRowNum();
for (int i = 1; i <= sum; i++) {
// 对象,保存传入的数据
UploadQUERY uploadQUERY = new UploadQUERY();
Row row = rs.getRow(i);
//读区商品
if(row.getCell(map.get("sku")) !=null){
row.getCell(map.get("sku")).setCellType(CellType.STRING);
// sku
String sku = row.getCell(map.get("sku")).toString();
uploadQUERY.setSku(sku);
}
if (row.getCell(map.get("门店编码")) != null) {
row.getCell(map.get("门店编码")).setCellType(CellType.STRING);
// 门店编码
storeCode = row.getCell(map.get("门店编码")).toString();
uploadQUERY.setStoreCode(storeCode);
}
if (row.getCell(map.get("售价")) != null) {
row.getCell(map.get("售价")).setCellType(CellType.NUMERIC);
// 商品售价
Double salePrices = (Double)row.getCell(map.get("售价")).getNumericCellValue();
uploadQUERY.setSalePrice(salePrices);
}
uploadQUERYList.add(uploadQUERY);
}
} catch (Exception e) {
logger.error("storeGoodsException:",e);
}
}
return "成功";
} catch (FileNotFoundException e) {
logger.error("storeGoodsException:",e);
return "失败";
} catch (IOException e) {
logger.error("storeGoodsException:",e);
return "失败";
}
}
Excel文件样式: