みなさん、良い一日を、
クライアント側からサーバー側(asp.netコア)コントローラーにajaxを使用してファイルをアップロードしようとしていますが、null値があります。
これが私のhtmlおよびjavascriptコードです。
<input type="file" id="myfile" class="required" />
<button type="button" class="btn btn-info" onclick="uploadcsvfile()">
<script>
function uploadcsvfile() {
var myfile= document.getElementById("myfile");
var formData = new FormData();
if (myfile.files.length > 0) {
for (var i = 0; i < myfile.files.length; i++) {
formData.append('file-' + i, myfile.files[i]);
}
}
$.ajax({
url: "/MyController/UploadFile/",
type: "POST",
dataType: "json",
data: formData,
contentType: false,
processData: false,
success: function(data){
},
error: function (data) {
}
})
}
</script>
IFormFileを使用するコントローラーは次のとおりです。
public async Task<JsonResult> UploadFile(IFormFile formData)
{
// do something here
}
前もって感謝します!
それはよく説明されています ここ :
<form id="form" name="form" action="/uploader" enctype="multipart/form-data" method="post">
<div class="buttons">
<div class="upload-button">
<div class="label">Click me!</div>
<input id="files" name="files" type="file" size="1" multiple onchange="uploadFiles('files');" />
</div>
</div>
</form>
function uploadFiles(inputId) {
var input = document.getElementById(inputId);
var files = input.files;
var formData = new FormData();
for (var i = 0; i != files.length; i++) {
formData.append("files", files[i]);
}
$.ajax(
{
url: "/uploader",
data: formData,
processData: false,
contentType: false,
type: "POST",
success: function (data) {
alert("Files Uploaded!");
}
}
);
}
[HttpPost]
public async Task<IActionResult> Index(IList<IFormFile> files)
{
foreach (IFormFile source in files)
{
string filename = ContentDispositionHeaderValue.Parse(source.ContentDisposition).FileName.Trim('"');
filename = this.EnsureCorrectFilename(filename);
using (FileStream output = System.IO.File.Create(this.GetPathAndFilename(filename)))
await source.CopyToAsync(output);
}
return this.View();
}
private string EnsureCorrectFilename(string filename)
{
if (filename.Contains("\\"))
filename = filename.Substring(filename.LastIndexOf("\\") + 1);
return filename;
}
private string GetPathAndFilename(string filename)
{
return this.hostingEnvironment.WebRootPath + "\\uploads\\" + filename;
}
これは、コントローラーのアクションにファイルを投稿する簡単な方法です。
表示:
var formData = new FormData();
formData.append('file', $('#myfile')[0].files[0]); // myFile is the input type="file" control
var _url = '@Url.Action("UploadFile", "MyController")';
$.ajax({
url: _url,
type: 'POST',
data: formData,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: function (result) {
},
error: function (jqXHR) {
},
complete: function (jqXHR, status) {
}
});
コントローラー:
[HttpPost]
public ActionResult UploadFile(IFormFile file)
{
List<string> errors = new List<string>(); // added this just to return something
if (file != null)
{
// do something
}
return Json(errors, JsonRequestBehavior.AllowGet);
}
ファイル入力の「名前」属性を指定するだけです(ASP.NETコントローラーの変数名と同じです)。 HTML:
<input type="file" name="thefile" />
C#:
public ActionResult UploadFile(IFormFile thefile) { }
AJAXリクエストの場合、FormDataオブジェクトに適切な名前を指定する必要があります。