从 Vue.JS UI 上传的文件未被 MVC 控制器捕获
File Uploaded from Vue.JS UI not being captured by MVC Controller
所以在我的 Vue 组件中,我有以下文件上传对话框。
<div class="file has-name is-right">
<label class="file-label">
<input class="file-input" type="file" v-on:change="HandleFileUpload" accept=".pdf">
<span class="file-cta">
<span class="file-icon">
<i class="icon-file-pdf"></i>
</span>
<span class="file-label">
Choose a file…
</span>
</span>
<span class="file-name" v-text="UploadFileName" style="width: 16em" />
</label>
</div>
在我的方法部分由以下方法处理:
HandleFileUpload(e) {
var files = e.target.files || e.dataTransfer.files;
console.warn(files);
if(files.length > 0) {
var uploadFile = files[0];
this.UploadFileName = uploadFile.name;
var formData = new FormData();
formData.append('Foo', this.Foo);
formData.append('File', uploadFile, this.UploadFileName);
axios.post(
'/Foo/Upload',
data,
{ headers: { 'Content-Type': 'multipart/form-data' } }
).then(/* logic to handle callback */);
} else {
this.UploadFileName = null;
}
}
最后是我的 MVC 控制器,问题就出在这里
[HttpPost]
public ActionResult Upload(FormCollection data)
{
var Foo= data.Get("Foo").Trim();
var Files = data.Get("File");
/* Rest of the method */
}
MVC 控制器中的文件为空,尽管当我使用开发人员工具检查它时,在 JS 和网络调用中填充了实际文件数据。我是否遗漏了 FormData 与 FormCollection 的交互?
嗯,试试这个方法,我刚刚检查了我创建的一个网络应用程序,它使用 ASP.NET 和 axios 进行发布,我的 JS 看起来与你的几乎相同,在 ASP.NET 中,我基本上是这样做:
HttpContext context = System.Web.HttpContext.Current;
HttpPostedFile postedFile = context.Request.Files.Count > 0
? context.Request.Files.Get(0)
: null;
所以在我的 Vue 组件中,我有以下文件上传对话框。
<div class="file has-name is-right">
<label class="file-label">
<input class="file-input" type="file" v-on:change="HandleFileUpload" accept=".pdf">
<span class="file-cta">
<span class="file-icon">
<i class="icon-file-pdf"></i>
</span>
<span class="file-label">
Choose a file…
</span>
</span>
<span class="file-name" v-text="UploadFileName" style="width: 16em" />
</label>
</div>
在我的方法部分由以下方法处理:
HandleFileUpload(e) {
var files = e.target.files || e.dataTransfer.files;
console.warn(files);
if(files.length > 0) {
var uploadFile = files[0];
this.UploadFileName = uploadFile.name;
var formData = new FormData();
formData.append('Foo', this.Foo);
formData.append('File', uploadFile, this.UploadFileName);
axios.post(
'/Foo/Upload',
data,
{ headers: { 'Content-Type': 'multipart/form-data' } }
).then(/* logic to handle callback */);
} else {
this.UploadFileName = null;
}
}
最后是我的 MVC 控制器,问题就出在这里
[HttpPost]
public ActionResult Upload(FormCollection data)
{
var Foo= data.Get("Foo").Trim();
var Files = data.Get("File");
/* Rest of the method */
}
MVC 控制器中的文件为空,尽管当我使用开发人员工具检查它时,在 JS 和网络调用中填充了实际文件数据。我是否遗漏了 FormData 与 FormCollection 的交互?
嗯,试试这个方法,我刚刚检查了我创建的一个网络应用程序,它使用 ASP.NET 和 axios 进行发布,我的 JS 看起来与你的几乎相同,在 ASP.NET 中,我基本上是这样做:
HttpContext context = System.Web.HttpContext.Current;
HttpPostedFile postedFile = context.Request.Files.Count > 0
? context.Request.Files.Get(0)
: null;