java代码实现⽂件上传与下载功能
前⾔
项⽬开发中,有时会使⽤到⽂件上传与下载功能。项⽬中提供⼀个模板供⽤户下载,⽤户下载完成后,添加需要的数据内容后,上传到项⽬中,项⽬后端接收⽂件后进⾏解析,需要存数据库就执⾏数据库的相关操作。
装linux系统怎么分区那么如何实现⽂件的上传与下载功能呢,下⾯这个案例可供参考(此项⽬基于springboot,框架采⽤的是⼈⼈权限框架,前后端交互使⽤ajax通信)。
⼀、模板⽂件的下载
1、前端创建模板⽂件下载链接
<a href="localhost:8080/admin/admin/equipment/download/" @click="tip">模板⽂件下载</a>
//此⽅法是点击模板⽂件下载,弹出注意事项。
<script>
var vm =new Vue({
el:'#rrapp',
data:{
},
methods:{
tip:function(){
layer.open({
type:0,
offset:'rt',
title:'注意事项'
,content:'设备名称不得为空;经费来源选填(⾏政、教学、其它)中的⼀个,分类号和归属单位查看sheet表2;其余可为空。'
});
}
}
});
</script>
2、后端接⼝编写
添加项⽬所需依赖
<!-- POI support -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<!-- support xlsx,docx.. -->
<dependency>java下载过程
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<!-- /POI support -->
@RestController
@RequestMapping("admin/equipment")
public class EquipmentController {
/**
* 模板⽂件下载
* @param response
springboot activiti*/
@SysLog("模板⽂件下载")
@RequestMapping("/download")
public void download(HttpServletResponse response){
try{
//获取⽂件模板
InputStream fis = Thread.currentThread().getContextClassLoader().getResourceAsStream("设备仪器⽤表.xls"); HSSFWorkbook workbook =new HSSFWorkbook(fis);
//设置⽂件ContentType类型,这样设置,会⾃动判断下载⽂件类型
response.setContentType("application/binary;charset=ISO8859-1");
//转码,免得⽂件名中⽂乱码
String fileName = de("设备仪器⽤表","UTF-8");
//设置⽂件下载头
response.setHeader("Content-disposition","attachment; filename="+ fileName +".xls");
ServletOutputStream out = null;
out = OutputStream();
workbook.write(out);
out.flush();
out.close();
}catch(IOException e){
e.printStackTrace();
}finally{
//关闭⽂件输出流
}
return;
}
}
3、后端接⼝中⽂件模板位置
注意:此模板⽂件位置位于resources⽂件夹下,与templates同级。
⼆、⽂件上传与导⼊数据⾄数据库
1、前端创建⽂件上传按钮
<a class="btn btn-primary"id="upload"><i class="fa fa-plus"></i> ;批量导⼊</a> <script>
new AjaxUpload('#upload',{
action: baseURL +"admin/equipment/upload",
name:'file',
网页设计与制作代码案例autoSubmit:true,
responseType:"json",
// 告诉jQuery不要去处理发送的数据
processData :false,
// 告诉jQuery不要去设置Content-Type请求头
contentType :false,
onSubmit:function(file, extension){
if(!(extension &&/^(xlsx|xls)$/.LowerCase()))){
alert('只⽀持xlsx、xls格式的Excel⽂件!');
return false;
}
},
onComplete :function(file, r){
de ==0){
alert(r.url);
}else{
alert(r.msg);
}
}
});
</script>
2、实体类
ity;
import batisplus.annotation.TableField;
import batisplus.annotation.TableId;
import batisplus.annotation.TableName;
up.AddGroup;
up.UpdateGroup;
import lombok.Data;
import straints.NotBlank;
import java.io.Serializable;
import java.util.Date;
/**
* 设备表
*
* @author yzs
* @email yzs@qq
* @date 2020-11-19 15:26:13
*/
@Data
@TableName("equipment")
public class EquipmentEntity implements Serializable {
private static final long serialVersionUID =1L;
/**
*
*/
@TableId
private Long id;
/**
* 设备编号
*/
private String number;
/**
* 分类号
*/
private String classnum;
/**
* 分类名
*/
@TableField(exist =false)
@NotBlank(message="分类名不能为空", groups ={AddGroup.class, UpdateGroup.class}) private String classname;
/**
* 设备名称
*/
private String name;
/**
* 型号
*/
private String model;
/**
* 规格
*/
private String specification;
/**
* 单价
*/
private Double price;
/**
* ⼚商
*/
private String vendor;
/**
* 出⼚号
*/
private String factorynum;
/**
* 购置⽇期
*/
private Date time;
/**
* 经费来源
*/
private String funding;
/**
* 归属单位编号
*/
private String deptnum;
/
**
* 归属单位名称
*/
@TableField(exist =false)
private String deptname;
/**
* 状态(0未分配 1已分配 2已报废)
*/
private Integer status;
}
3、后端接⼝编写
@RestController
@RequestMapping("admin/equipment")
public class EquipmentController {
@Autowired
private EquipmentService equipmentService;
/**
* 上传⽂件
*/
@SysLog("上传⽂件")
@RequestMapping("/upload")
public R upload(@RequestParam("file") MultipartFile file)throws Exception { if(file.isEmpty()){
throw new RRException("上传⽂件不能为空");
}
FileInputStream inputStream =(FileInputStream) InputStream();
//⽤于存储解析后的Excel⽂件
Workbook workbook =new HSSFWorkbook(inputStream);
//得到表
Sheet sheet = SheetAt(0);
//获取标题内容
// Row rowTitle = Row(1);
// if (rowTitle != null){
// int cellCount = PhysicalNumberOfCells();
/
/ for (int cellNum=0; cellNum<cellCount; cellNum++){
// Cell cell = Cell(cellNum);
// if (cell != null){
// int cellType = CellType();
login name是什么意思// String cellValue = StringCellValue();
// }
// }
// }
//获取内容信息
int rowCount = PhysicalNumberOfRows();
for(int rowNum=1; rowNum<rowCount; rowNum++){
equalsignorecase in javaRow rowData = Row(rowNum);
if(rowData != null){
EquipmentEntity equipmentEntity =new EquipmentEntity();
//设备编号
String number = String.Cell(0));
if(number =="null"){
number = UUID.randomUUID().toString().substring(0,8);
equipmentEntity.setNumber(number);
}else{
number = number.substring(0,number.indexOf("."));
equipmentEntity.setNumber(number);
}
//设备名称
String name = String.Cell(1));
if(name =="null"){
equipmentEntity.setName(name);
}else{
name = name.substring(0,name.indexOf("."));
equipmentEntity.setName(name);
}
//分类号
String classnum = String.Cell(2));
if(classnum =="null"){
equipmentEntity.setClassnum(classnum);
}else{
classnum = classnum.substring(0,classnum.indexOf("."));
equipmentEntity.setClassnum(classnum);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论