需求:CSV实现上传下载
<Input className="upload-input" type="file" onChange={(e) => this.onFileChosen(e)} style={{width: 150, marginRight: 20}}/>
{/*<span style={{color: 'red'}}>格式为.excel</span>*/}
<Button loading={this.state.downLoading} icon="download" onClick={this.download.bind(this)}
style={{marginLeft: 0,marginTop: '10px'}}>下载</Button>
onFileChosen(e) {
// const {formData} = this.state;
const chosenFile = e.target.files[0];
if (chosenFile) {
console.log('file size:', chosenFile.size);
// 10M: 10 * 1024 * 1024 = 10485760 bytes
const sizeLimit = 10485760;
if (chosenFile.size > sizeLimit) {
message.error('File size should not exceed 10M.');
return;
}
}
const formData = new FormData();
formData.append('file', chosenFile);
assetAction.importTierConfig(formData).then((result) => {
if (result.data.code < 0) {
message.error(result.data.msg || intl.formatMessage({id: 'message.operator.fail'}));
return;
}else{
message.info('successful!');
}
this.setState({
errorData: result.data
});
if(result.data.length > 0) {
this.downLoadTableToExcel(result.data);
}
this.fetchList();
}).catch((error) => {
console.log(error);
});
this.setState({
chosenFile
});
}
下载
download() {
const param = this.data.queryCoinTradeConfigDetail;
let data = {
coinId: param.coinId
};
assetAction.exportTierConfig(data).then((result) => {
this.setState({downLoading: false});
// this.onFetch(data);
}).catch((error) => {
if(error === 403) {
message.error(intl.formatMessage({id: 'no.operator'}));
}
console.log(error);
});
}
后端
上传下载工具类
public static ResponseResult<List<AdminCoinTierConfig>> importTierConfigs(MultipartFile file) {
List<AdminCoinTierConfig> adminCoinTierConfigs = new ArrayList<>();
if(file == null){
return ResponseResult.success(adminCoinTierConfigs);
}else{
final String filename = file.getOriginalFilename();
String extName = filename.substring(filename.lastIndexOf(".") + 1);
List<List<String>> results = null;
if("csv".equalsIgnoreCase(extName) ) {
try {
results = ExportCSVUtil.readCSV(file.getInputStream());
} catch (final Exception e) {
log.error("csv parse exception", e);
return ResponseResult.failure("Csv解析错误");
}
List<String> keys = results.get(0);
int len = results.size();
int length = keys.size();
Integer tierIntFirst = null;
String maxAmountFirst = null;
String minAmount = null;
List<Integer> coinIdList = new ArrayList<>();
int n = 1;
int m = 1;
for (int i = 1; i < len; i++) {
List<String> data = results.get(i);
AdminCoinTierConfig tier = new AdminCoinTierConfig();
for (int j = 0; j < length; j++) {
String s = keys.get(j);
if("".equals(data.get(j))){
return ResponseResult.failure("Csv内容不能为空!");
}
tier.setObject(s, data.get(j));
if(!"".equals(s)){
s = s.trim();
if("coinId".equals(s) || "maxAmount".equals(s)){
if(i == m){
coinIdList.add(tier.getCoinId());
maxAmountFirst = data.get(3) == null || "".equals(data.get(3)) ? "" : data.get(3).toString();
}else if("coinId".equals(s) && i != m){
if(coinIdList.contains(tier.getCoinId())){
minAmount = data.get(2) == null || "".equals(data.get(2)) ? "" : data.get(2).toString();
if(!minAmount.equals(maxAmountFirst)){
return ResponseResult.failure("Csv中同一币种顺序档位的maxAmount要和minAmount一致,请核对后再上传!");
}else{
maxAmountFirst = data.get(3) == null || "".equals(data.get(3)) ? "" : data.get(3).toString();
}
}else{
coinIdList.add(tier.getCoinId());
n = i;
m = i;
}
}
}
if("tier".equals(s)){
Integer tierInt = tier.getTier();
if(tierInt != null){
if(n == i){
tierIntFirst = Integer.valueOf(data.get(1) == null || "".equals(data.get(1)) ? "" : data.get(1).toString());
if(tierIntFirst.equals(tierInt)){
tier.setTier(tierInt);
}
}else{
if(tierInt != tierIntFirst + 1){
return ResponseResult.failure("Csv中档位值要连续,请核对后再上传!");
}else if(tierInt == tierIntFirst + 1){
tier.setTier(tierInt);
tierIntFirst = tierIntFirst + 1;
}
}
}
}
}
}
adminCoinTierConfigs.add(tier);
}
ResponseResult result = verifyTierConfig(adminCoinTierConfigs);
if(result == null){
return ResponseResult.success(adminCoinTierConfigs);
}else{
if(result.getCode() == 0){
return ResponseResult.success(adminCoinTierConfigs);
}else{
return ResponseResult.failure(result.getMsg());
}
}
// return ResponseResult.success(adminCoinTierConfigs);
} else {
return ResponseResult.failure("梯度档位上传格式不正确,请核对后重新上传!");
}
}
}