Element-ui+RuoYi项目 多文件上传 前端+后端
在项目中一次提交需要将2个以上的文件传到本地服务器上,element-ui虽然可以实现一次上传多个文件,但是需要多次发送请求,如:提交两个以上的文件时,会调用两次以上的请求。那么如何只发送一次请求就将多个文件同时提交呢?
-
<template>
-
<div class="app-container">
-
<el-upload
-
ref="upload"
-
accept=".jpg, .png, .txt"
-
:action="upload.url"
-
multiple
-
:http-request="HttpUploadFile"
-
:headers="upload.headers"
-
:file-list="upload.fileList"
-
:on-success="handleFileSuccess"
-
:on-change="changeFileList"
-
:data="getfileData()"
-
:auto-upload="false">
-
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
-
</el-upload>
-
<el-button style="margin-left: 10px;" type="success"
-
:loading="upload.isUploading" @click="submitUpload">提交</el-button>
-
</div>
-
</template>
-
-
<script>
-
import { uploadFile } from "@/api/system/info";
-
import { getToken } from "@/utils/auth";
-
-
export default {
-
data(){
-
return {
-
fileData: '',
-
form: {},
-
upload: {
-
// 是否禁用上传
-
isUploading: false,
-
// 设置上传的请求头部
-
headers: { Authorization: "Bearer " getToken() },
-
// 上传的地址
-
url: process.env.VUE_APP_BASE_API "/common/upload",
-
// 上传的文件列表
-
fileList: []
-
},
-
}
-
methods: {
-
//文件上传成功后的钩子函数
-
handleFileSuccess(response, file, fileList) {
-
this.upload.isUploading = false;
-
this.upload.fileList = []
-
this.$modal.msgSuccess(response.msg);
-
},
-
//fileList长度改变时触发
-
changeFileList(file, fileList) {
-
this.upload.fileList = fileList
-
},
-
getfileData() {
-
//此处的form是表单中的其它绑定值
-
return this.form
-
},
-
submitUpload() {
-
//创建FormData对象,用于携带数据传递到后端
-
this.fileData = new FormData()
-
this.$refs.upload.submit();
-
this.fileData.append("data", JSON.stringify(this.form));
-
this.fileData.append("headers", { Authorization: "Bearer " getToken() });
-
this.fileData.append("withCredentials",false)
-
this.fileData.append("filename", "file");
-
var i = this.upload.fileList.length
-
if (i !== 0) {
-
//此处执行调用发送请求
-
uploadFile(this.fileData).then((res) =>{
-
if(res.code === 200) {
-
this.upload.isUploading = false;
-
this.upload.fileList = []
-
this.$modal.msgSuccess(res.msg);
-
} else {
-
this.$message({
-
message: "失败",
-
type: 'error'
-
})
-
}
-
})
-
} else {
-
//如果没有文件要上传在此处写逻辑
-
}
-
},
-
HttpUploadFile(file) {
-
this.fileData.append('files', file.file); // append增加数据
-
},
-
}
-
}
-
};
-
</script>
前端代码element-ui的upload标签中关键是要添加http-request,它会在提交文件上传前,拦截请求然后我们这里执行append将要上传的多个文件提前添加到fileData中。
-
-
-
public AjaxResult uploadFile({ MultipartFile[] files, String data)
-
try{
-
//这里的data是同时携带的其它信息就是前端的form里的信息,可以是用下面的json方式解析为自己相应的对象
-
System.out.println(data);
-
//JSONObject.toJavaObject(JSONObject.parseObject(data),TSoftRequirementUpload.class);
-
// 上传文件路径
-
String filePath = RuoYiConfig.getUploadPath();
-
String fileName = "";
-
String url = "";
-
int z;
-
// 上传并返回新文件名称
-
System.out.println(filePath);
-
AjaxResult ajax = AjaxResult.success();
-
for (int i = 0 ; i<files.length; i ) {
-
System.out.println(files[i].getOriginalFilename());
-
fileName = FileUploadUtils.upload(filePath, files[i]);
-
url = serverConfig.getUrl() fileName;
-
SysFileInfo sysFileInfo = new SysFileInfo();
-
sysFileInfo.setFileName(fileName);
-
sysFileInfo.setFilePath(filePath);
-
sysFileInfo.setRealfileName(files[i].getOriginalFilename());
-
sysFileInfo.setRequirementId(tSoftRequirementUpload.getId());
-
z = iSysFileInfoService.insertSysFileInfo(sysFileInfo);
-
if (z == 1) {
-
ajax.put("fileName" i, fileName);
-
ajax.put("url" i, url);
-
}
-
}
-
return ajax;
-
}
-
catch (Exception e)
-
{
-
System.out.println(e.getMessage());
-
return AjaxResult.error(e.getMessage());
-
}
-
}
-
//需要用到的类,可根据自己的实际情况修改
-
public class SysFileInfo
-
{
-
private static final long serialVersionUID = 1L;
-
-
/** 文件id */
-
private Long fileId;
-
-
/** 文件名称 */
-
-
private String fileName;
-
-
/** 文件路径 */
-
-
private String filePath;
-
-
/** 真实的文件名称 */
-
-
private String realfileName;
-
-
/** 软件需求上报表id */
-
-
private Long requirementId;
-
-
public void setFileId(Long fileId)
-
{
-
this.fileId = fileId;
-
}
-
-
public Long getFileId()
-
{
-
return fileId;
-
}
-
public void setFileName(String fileName)
-
{
-
this.fileName = fileName;
-
}
-
-
public String getFileName()
-
{
-
return fileName;
-
}
-
public void setFilePath(String filePath)
-
{
-
this.filePath = filePath;
-
}
-
-
public String getFilePath()
-
{
-
return filePath;
-
}
-
public void setRealfileName(String realfileName)
-
{
-
this.realfileName = realfileName;
-
}
-
-
public String getRealfileName()
-
{
-
return realfileName;
-
}
-
public void setRequirementId(Long requirementId)
-
{
-
this.requirementId = requirementId;
-
}
-
-
public Long getRequirementId()
-
{
-
return requirementId;
-
}
-
-
-
public String toString() {
-
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-
.append("fileId", getFileId())
-
.append("fileName", getFileName())
-
.append("filePath", getFilePath())
-
.append("realfileName", getRealfileName())
-
.append("requirementId", getRequirementId())
-
.toString();
-
}
-
}
第一次发文章,很多地方不足!!希望能帮助到大家!!谢谢观看!!
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggjceg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13