没有收到来自文件上传的任何数据
Not receiving any data from file upload
我正在尝试使用 Krajee Bootstrap File Input 上传文件。我正在使用 ASP.NET Core 2。这是我的 HTML:
<input id="fileFileUpload" type="file" />
这是我的 javascript 代码:
$("#fileFileUpload").fileinput({
showPreview: true,
uploadAsync: false,
uploadUrl: '/fileupload'
});
这是我的控制器代码:
[HttpPost]
public JsonResult Index(List<IFormFile> files)
{
// Do stuff
}
我在我的控制器方法上放置了一个断点,并且正在命中断点。但是 files
是空的。如何检索已上传的文件?
我认为该代码无效的第一个原因是您输入的内容未指定名称。
<input id="fileFileUpload" name="files" type="file" />
除此之外,您可以关注 this MSDN 文章。
您可以通过另一个按钮访问这些文件,然后像往常一样使用 ajax post 它们。 ButtonFileUpload8 是新按钮的 ID,file-8 是文件上传控件的 ID。您必须禁用上传按钮
这不是完美的代码,我只是把它放在一起展示它是如何完成的。
HTML:
<form enctype="multipart/form-data">
<div class="row mb-2">
<div class="col-md-8">
<div class="file-loading">
<input id="file-8" type="file" multiple>
</div>
</div>
</div>
<div class="btn-group btn-group-sm mr-1" role="group">
<button id="ButtonFileUpload8" type="button" class="btn btn-sm">
Blue
</button>
</div>
</form>
Javascript(注意这会忽略启动器中设置的 post URL,因此调用 FileUploadKrajee 并使用 ajax):
$("#file-8").fileinput({
uploadUrl:"@Url.Action("FileUploadKrajee", "App")",
uploadAsync: true,
minFileCount: 1,
maxFileCount: 5,
overwriteInitial: false,
initialPreview: "",
initialPreviewConfig: "",
uploadExtraData: "",
showUpload: false
});
// Click of upload button
$("#ButtonFileUpload8").click(function () {
var control = document.getElementById("file-8");
var files = control.files;
var formData = new FormData();
for (var i = 0; i != files.length; i++) {
formData.append("files", files[i]);
}
$.ajax({
url: 'UploadFiles3',
type: "POST",
contentType: false, // Do not set any content header
processData: false, // Do not process data
data: formData,
async: false,
success: function (result) {
if (result != "") {
alert(result);
}
control.files.value("");
},
error: function (err) {
alert(err.statusText);
}
});
});
然后在接收控制器中可以使用:
public ActionResult UploadFiles3(List<IFormFile> files)
{
string nams = "";
string funame = "";
foreach (IFormFile source in files)
{
string filename = ContentDispositionHeaderValue.Parse(source.ContentDisposition).FileName.ToString();
filename = this.EnsureCorrectFilename(filename);
nams = nams + source.FileName.ToString();
funame = "D:\Data\PointsAlign\Core\" + filename;
FileStream output = System.IO.File.Create(funame);
source.CopyTo(output);
}
return Json("Hi, Alster. Your files uploaded successfully " + nams);
}
这确实有效,但我还没有针对任何问题对其进行压力测试
我正在尝试使用 Krajee Bootstrap File Input 上传文件。我正在使用 ASP.NET Core 2。这是我的 HTML:
<input id="fileFileUpload" type="file" />
这是我的 javascript 代码:
$("#fileFileUpload").fileinput({
showPreview: true,
uploadAsync: false,
uploadUrl: '/fileupload'
});
这是我的控制器代码:
[HttpPost]
public JsonResult Index(List<IFormFile> files)
{
// Do stuff
}
我在我的控制器方法上放置了一个断点,并且正在命中断点。但是 files
是空的。如何检索已上传的文件?
我认为该代码无效的第一个原因是您输入的内容未指定名称。
<input id="fileFileUpload" name="files" type="file" />
除此之外,您可以关注 this MSDN 文章。
您可以通过另一个按钮访问这些文件,然后像往常一样使用 ajax post 它们。 ButtonFileUpload8 是新按钮的 ID,file-8 是文件上传控件的 ID。您必须禁用上传按钮
这不是完美的代码,我只是把它放在一起展示它是如何完成的。
HTML:
<form enctype="multipart/form-data">
<div class="row mb-2">
<div class="col-md-8">
<div class="file-loading">
<input id="file-8" type="file" multiple>
</div>
</div>
</div>
<div class="btn-group btn-group-sm mr-1" role="group">
<button id="ButtonFileUpload8" type="button" class="btn btn-sm">
Blue
</button>
</div>
</form>
Javascript(注意这会忽略启动器中设置的 post URL,因此调用 FileUploadKrajee 并使用 ajax):
$("#file-8").fileinput({
uploadUrl:"@Url.Action("FileUploadKrajee", "App")",
uploadAsync: true,
minFileCount: 1,
maxFileCount: 5,
overwriteInitial: false,
initialPreview: "",
initialPreviewConfig: "",
uploadExtraData: "",
showUpload: false
});
// Click of upload button
$("#ButtonFileUpload8").click(function () {
var control = document.getElementById("file-8");
var files = control.files;
var formData = new FormData();
for (var i = 0; i != files.length; i++) {
formData.append("files", files[i]);
}
$.ajax({
url: 'UploadFiles3',
type: "POST",
contentType: false, // Do not set any content header
processData: false, // Do not process data
data: formData,
async: false,
success: function (result) {
if (result != "") {
alert(result);
}
control.files.value("");
},
error: function (err) {
alert(err.statusText);
}
});
});
然后在接收控制器中可以使用:
public ActionResult UploadFiles3(List<IFormFile> files)
{
string nams = "";
string funame = "";
foreach (IFormFile source in files)
{
string filename = ContentDispositionHeaderValue.Parse(source.ContentDisposition).FileName.ToString();
filename = this.EnsureCorrectFilename(filename);
nams = nams + source.FileName.ToString();
funame = "D:\Data\PointsAlign\Core\" + filename;
FileStream output = System.IO.File.Create(funame);
source.CopyTo(output);
}
return Json("Hi, Alster. Your files uploaded successfully " + nams);
}
这确实有效,但我还没有针对任何问题对其进行压力测试