我正在尝试使用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
为空。如何检索上传的文件?
答案 0 :(得分:2)
我可以看到该代码不起作用的首要原因是您的输入未分配名称。
<input id="fileFileUpload" name="files" type="file" />
除此之外,您可以关注this MSDN文章。
答案 1 :(得分:0)
您可以从另一个按钮访问文件,然后像往常一样使用ajax发布文件。 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(请注意,这会忽略启动程序中设置的发布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);
}
这确实有效,但是我还没有针对任何问题进行压力测试