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文件樣式: