SpringBoot文件上传 文件加参数一起上传。
- 前端代码实现:
HTML页面代码:
<div class="layui-form-item layui-form-text">
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 10px;">
<legend>文件上传</legend>
</fieldset>
<div class="layui-form-item">
<label class="layui-form-label">选择文件</label>
<div class="layui-input-inline">
<input type="file" name="file" lay-filter="file" id = "file" />
<input type="type" name="file" lay-filter="type" id = "type" />
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">文件描述:</label>
<div class="layui-input-inline" style="width: 660px;">
<textarea class="layui-input" name="description" lay-filter="description" style="height: 100px;"></textarea>
</div>
</div>
JS代码:
//根据id获取文件
var formData = $("#file")[0].files[0]
if(formData != null){ //上传文件
var type = $("#type").val();//这个是我功能需要type的参数
var description = $("#description").val();//文件描述参数
var fileParam = new FormData();//创建FormData对象传送到后台
fileParam.append('file', formData)
fileParam.append('type',type);
fileParam.append('description',description);
//上传图纸 调用方法 该方法在下面
requestDataP_ImagesImport("balance/task/finish/file", fileParam, {
"dataType": 'json'
})
} else {
layer.msg("请选择文件上传");
}
上传文件上传调用的方法在这个
//api:127.0.0.8080:/balance/task/finish/file接口路径 data:fileParam传送的参数 params:是 { "dataType": 'json'}
function requestDataP_ImagesImport(api, data, params) {
$.ajax({
url: system.api.url + api,
type: 'POST',
data: data,
headers: {
"login-token": localStorage.getItem("token")
},
dataType:params.dataType,
processData: false,
contentType: false,
success: function (data) {
if (data.code == "0000") { //data.code是我自定义的返回状态码
layer.msg("操作成功",{time:1000},function(){
layer.close();
});
} else if (data.code == "4008") {
layer.msg("任务已经是结束状态",{time:3000},function()
layer.close();
});
} else if (data.code == "4002") {
layer.msg("还有子任务未结束",{time:3000},function(){
layer.close();
});
}
}
})
}
- 后端代码实现:
(1)接收前端实体类
public class FdFile {
//接收前端传来的实体类,get、set方法忽略自己生成
private Long id;//其他参数用于保存在文件表中,根据自己的需求写
private Long taskId;
private String name;
private MultipartFile file;//文件
private String src;
private Integer type;
private String description;
private Long updateuser;
private Date createtime;
}
(2)接口Controller
@ApiOperation(value = "结束任务 上传文件")
@PostMapping("/finish/file")
@Transactional
public ResultInfo finishTaskFile (FdFile fdFile) {
try {
//文件存在的位置
String path = "/D:/file";
//获取文件名
String fileName = fdFile.getFile().getOriginalFilename();
//创建一个UUID用时间戳表示
String UUID = new Date().getTime() + "";
//组合成新文件名避免有重复的文件名
String newFileName = UUID + fileName;
//File.separator 表示:/
File destFile = new File(path+File.separator+newFileName);
//判断该文件下的上级文件夹是否存在 不存在创建
if(!destFile.getParentFile().exists()) {
destFile.getParentFile().mkdirs();
}
//上传文件
fdFile.getFile().transferTo(destFile);//这一步结束就上传成功了。
//==========================================================================分割线下面是我自己的业务需求,将其他信息和文件的名称,路径保存到数据库。
//保存文件到数据库 这个是我自己业务需要的,如果只是单纯的上传文件到一个位置 则下面的代码就可以不同写了
fdFile.setName(newFileName);
fdFile.setSrc(path);
Long fdFileId = saveFdFile(fdFile);
//将结束内容保存到balancetask表中
if (fdFileId != null) {
FdBalanceTask fdBalanceTask = new FdBalanceTask();
fdBalanceTask.setId(fdFile.getTaskId());
fdBalanceTask.setFileId(fdFileId);
fdBalanceTask.setCompleteContent(fdFile.getDescription());
fdBalanceTask.setIsNormal(fdFile.getType());
fdBalanceTask.setState(3);
fdBalanceTask.setUpdateTime(new Date());
//保存结束信息到任务表中
return ResultConstants.success(fdBalanceTaskMapper.updateFinish(fdBalanceTask));
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 保存文件信息到文件表
* @param fdFile
* @return 返回文件id
*/
public Long saveFdFile(FdFile fdFile) {
fdFile.setUpdateuser(UserUtil.getCurrentUser().getId());
fdFile.setCreatetime(new Date());
int isFlag = fdFileMapper.saveFdFile(fdFile);
if (isFlag == 1) {
return fdFile.getId();
}
return null;
}
3、Mapper层接口
//@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn ="id") 让保存成功并返回该条数据id
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn ="id")
@Insert("insert into fd_file(name,src,description,updateuser,createtime) values(#{name},#{src},#{description},#{updateuser},#{createtime})")
int saveFdFile(FdFile fdFile);
4、 以上代码根据自己的需求截取,写的不好请多多指教。记录一下也方便以后自己有需求时候再回顾该上传内容。