.Net WebApi+ElementPlus实现附带数据的文件上传
|
admin
2024年9月16日 20:56
本文热度 522
|
前后端分离项目,数据交互都知道怎么做,文件上传应该也都知道。但是存在有些情况下,我们需要将文件和数据同时提交。ElementPlus的upload上传组件提供了可携带数据的data属性,但是在.NetWebApi下应该如何做接收呢?下面通过示例我们简单实现一下。开发环境:.NET 6
开发工具:Visual Studio 2022
- 这里假设我们已经有了一个Vue3项目,并且引入了ElementPlus。
- 首先是前端的html代码,这里我们需要同时将数据内容和文件上传到后台,如下:
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="数据内容" prop="Value">
<el-input v-model="formData.Value" :autosize="{ minRows: 8, maxRows: 16 }" type="textarea" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="选择文件" prop="Name">
<el-input v-model="formData.Name" readonly>
<template #append>
<el-upload
ref="uploadRef"
:action="upload.action"
:headers="upload.headers"
:show-file-list="false"
:on-change="onUploadChange"
:before-upload="onUploadBefore"
:on-success="onUploadSuccess"
:on-error="onUploadError"
:auto-upload="false"
:data="formData"
accept=".txt"
>
<el-button type="primary">选择文件</el-button>
</el-upload>
</template>
</el-input>
</el-form-item>
</el-col>
const uploadRef = ref<UploadInstance>();
const formData = ref({
Name: '',
Value: '',
});
const onUploadChange = (file: any) => {
formData.value.Name = file.name;
};
const onUploadBefore = (file: any) => {
if (file.name.lastIndexOf('.txt') != file.name.length - 4) {
EMsg.error('请选择文本文件');
return false;
}
return true;
};
const onUploadSuccess = (res: any) => {
EMsg(res);
onClose();
emit('refresh');
};
const onUploadError = (res: any) => {
EMsg.error(res.Msg);
};
//提交按钮触发
const onSubmit = () => {
uploadRef.value!.submit();
});
};
- 上面的代码就会在提交的时候将数据和内容直接给到WebApi,WebApi接收代码如下:
//先定义一个接收类
public class InFileData
{
public string Name { get; set; }
public string Value { get; set; }
public IFormFile? file { get; set; }
}
[HttpPost]
public ApiJsonResult Add([FromForm] InFileData input)
{
if (input.file == null)
{
return ApiJsonResult.Convert(false,"没有文件");
}
string filter = Path.GetExtension(input.Name);
string name = Guid.NewGuid().ToString("N") + filter;
string path = Path.Combine(App.StaticData.UploadPath, name);
using var stream = new FileStream(path, FileMode.OpenOrCreate);
input.file.CopyTo(stream);
//获取到的表单数据
string value=input.Value;
return ApiJsonResult.Success;
}
该文章在 2024/9/18 12:26:33 编辑过