单独进行文件上传的方式常用multipartfile,但并不能携带其它参数:
使用multiparthttpservletrequest可将文件、参数以键值形式包装起来,传送至controller。
例:
接口:
@requestmapping(value = "/createticket", method = requestmethod.post)
@apioperation(value = "新建工单", notes = "新建工单")
@responsebody
public commonresultbo createticket(multiparthttpservletrequest request) {
log.info("createticket begin.");
try {
ticketinfo ticketinfo = getticketinfo(request);
ticketinfo.setstatus("已派发");
return ticketinfoservice.insertticket(ticketinfo);
} catch (exception exc) {
exc.printstacktrace();
log.error("createticket error: " exc.getmessage());
return commonresultbo.init(null, -1, "createticket failed.");
}
}
/**
* 功能描述 储存文件 获取工单信息类对象
*
* @param request 页面传参
* @return 工单信息类对象
*/
private ticketinfo getticketinfo(multiparthttpservletrequest request) {
string ticketinfos = request.getparameter("ticketinfos"); // 通过前后端约定的参数名获取参数,这里是json字符串
list files = request.getfiles("file"); // 通过前后端约定的参数名获取参数,这里是文件,getfile获取单个文件,getfiles获取多 // 个文件
// 保存工单文件
string path;
path = this.readfile(files); // 文件读取
// setfilepath
ticketinfo ticketinfo = jsonobject.parseobject(ticketinfos, ticketinfo.class); // 将获取到的json字符串转化为业务实体类
ticketinfo.setfilepath(path);
return ticketinfo;
}
/**
* 功能描述 读取文件
*
* @param files 文件集
* @return 文件路径
*/
private string readfile(list files) {
log.info("begin to read file.");
list paths = new arraylist<>();
for (multipartfile file : files) {
string path;
try {
if (file.isempty()) {
log.info("file empty.");
}
// 获取文件名
string filename = file.getoriginalfilename();
log.info("上传的文件名为:" filename);
// 获取文件的后缀名
string suffixname = null;
if (filename != null) {
suffixname = filename.substring(filename.lastindexof("."));
}
log.info("上传的后缀名为:" suffixname);
// 文件上传后的路径
string filepath = "d:\\download\\file\\";
path = filepath filename;
file dest = new file(path);
// 检测是否存在目录
if (!dest.getparentfile().exists()) {
dest.getparentfile().mkdirs();
}
// 写入文件
file.transferto(dest); // multipartfile中封装了一个非常简单的方法transferto(file file),此处只能存放绝对路径,否则会导致读取异常,
// 个人还未遇到过。可以用传统方式来替换。
} catch (ioexception exception) {
exception.printstacktrace();
log.error("createticket error, file transfer error: " exception.getmessage());
return null;
}
path = path.replace("\\", "\\\\");
paths.add(path);
}
return string.join(",", paths);
}
postman请求:
参数格式以form-data形式传递。