我有一个接受这样的文件的视图:
<form method="post" id="myform" enctype="multipart/form-data"
asp-controller="UploadFiles" asp-action="Index">
<div class="form-group">
<div class="col-md-10">
<p>Seleziona un file ORI ed un file MOD.</p>
<label for="fileOri">Seleziona ORI</label>
<input id="fileOri" type="file" name="fileOri" multiple />
<p></p>
<label for="fileMod">Seleziona MOD</label>
<input id="fileMod" type="file" name="fileMod" multiple />
<p></p>
<input id="check" name="checkBoxCorreggi" type="checkbox" />
<label for="check">Correggi Checksum</label>
</div>
</div>
<div class="form-group">
<div class="col-md-10">
<p></p>
<input type="button" id="VerificaChecksum" value="Verifica Checksum" onclick="fileUpload()" />
<!--value= "Verifica Checksum-->
<p></p>
</div>
</div>
</form>
和类似的控制器:
public class UploadFilesController : Controller
{
[HttpPost("UploadFiles")]
public virtual string UploadFiles(object obj)
{
return "Just a test";
}
}
我想要实现的是将文件从客户端传递到控制器,我已经读了很多东西,但到目前为止都没有用,这是我的javascript代码,应该调用它控制器:
function fileUpload() {
var fd = new FormData();
var xhr = new XMLHttpRequest();
var file = document.getElementById("fileOri").files[0];
fd.append("file", file);
xhr.open("POST", "/Home/Dll194/UploadFiles", true);
xhr.send()
}
但是我在VS2017中控制器代码中的断点没有被击中,我做错了吗?有人可以说明将文件发送到MVC控制器的过程吗?我正在使用MVC和Netcore 2.1。
编辑: 通过在Fiddler中分析我的呼叫,它说该呼叫的响应是正确的(200),所以我不明白为什么我的控制器上的断点没有命中。谢谢!
答案 0 :(得分:0)
尝试使用以下代码编辑功能:
xhr.send(fd)
答案 1 :(得分:0)
在控制器中:
[HttpPost("UploadFiles")]
public virtual string UploadFiles()
{
HttpRequest request = HttpContext.Current.Request;
var files = request.Files;
return "Just a test";
}
答案 2 :(得分:0)
将文件放入请求正文中
var file = document.getElementById("fileOri").files[0];
var req = new XMLHttpRequest();
req.open("POST", "/Home/Dll194/UploadFiles", true);
req.setRequestHeader("File-Name", file.name);
req.setRequestHeader("File-Size", file.size);
req.send(file);
然后,您可以将文件保存在ASP.NET Core中:
[HttpPost("UploadFiles")]
public virtual string UploadFiles()
{
using (FileStream stream = new FileStream(Request.Headers["File-Name"], FileMode.Create))
{
await Request.Body.CopyToAsync(stream);
}
return "File uploaded!";
}
答案 3 :(得分:0)
您可以使用ajax将formdata传递给控制器。
JS:
@section Scripts{
<script>
function fileUpload() {
var input = document.getElementById("fileOri");
var files = input.files;
var formData = new FormData();
for (var i = 0; i != files.length; i++) {
formData.append("files", files[i]);
}
$.ajax(
{
url: "/Home/Upload",
data: formData,
processData: false,
contentType: false,
type: "POST",
success: function (data) {
alert("Files Uploaded!");
}
}
);
}
</script>
}
HomeController:
[HttpPost]
public async Task<IActionResult> Upload(IList<IFormFile> files)