【问题标题】:Not able to upload files to server in ASP.NET MVC - always get a count of 0无法在 ASP.NET MVC 中将文件上传到服务器 - 始终计数为 0
【发布时间】:2021-04-05 11:42:24
【问题描述】:

我正在尝试使用 ASP.NET MVC 将文件上传到服务器。我正在使用 Ajax 和控制器,我的代码似乎可以正常工作,但无法将文件上传到服务器。

这是我的代码;你能告诉我我做错了什么吗?

function SubmitAddEdit(form) {
    $.validator.unobtrusive.parse(form);
    if ($(form).valid()) {
        var data = $(form).serializeJSON();
        data = JSON.stringify(data);
        $.ajax({
            type: 'POST',
            url: apiurl,
            data: data,
            contentType: 'application/json',
            success: function (data) {
                if (data.success) {
                    popup.modal('hide');
                    ShowMessage(data.message);
                    dataTable.ajax.reload();
                } else {
                    ShowMessageError(data.message);
                }
            }
        });

    }
    return false;
}
<form onsubmit="return SubmitAddEdit(this)" enctype = "multipart/form-data">

        <div class="col-lg-6">
            
                <!-- The file input field used as target for the file upload widget -->
                <input type="file" name="files" id="files" multiple="multiple">
        </div>
</form>
public async Task<IActionResult> PostTicket(List<IFormFile> files, [FromBody] Ticket ticket)
{
    var fileName = await _dotnetdesk.Ticket(files, _env);
}

public async Task<string> Ticket(List<IFormFile> files, IHostingEnvironment env)
{
    var result = "";

    var webRoot = env.WebRootPath;
    var uploads = System.IO.Path.Combine(webRoot, "uploads");
    var extension = "";
    var filePath = "";
    var fileName = "";

    foreach (var formFile in files)
    {
        if (formFile.Length > 0)
        {
            extension = System.IO.Path.GetExtension(formFile.FileName);
            fileName = Guid.NewGuid().ToString() + extension;
            filePath = System.IO.Path.Combine(uploads, fileName);

            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await formFile.CopyToAsync(stream);
            }

            result = fileName;
        }
    }

    return result;
}

这是我通过 ASP.NET MVC 上传文件的代码,但它没有进入循环内部,每次我尝试调试文件时都会得到 0 的计数。请让我知道我做错了什么。

【问题讨论】:

    标签: asp.net ajax asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    这些行有一个问题:

    var data = $(form).serializeJSON();
    data = JSON.stringify(data);
    

    您不想要文件的字符串表示形式,这将是一种非常低效的处理方式,而且我认为这种获取它的方法无论如何都行不通。

    不要对表单进行字符串化,而是直接将其作为数据传入或构建一个新的FormData 对象,如下所示:

    var data = new FormData();
    data.append('files', form.files.files)
    

    并将其用作 Ajax 请求的数据。

    【讨论】:

      猜你喜欢
      • 2011-01-08
      • 1970-01-01
      • 2021-06-19
      • 2015-10-19
      • 2012-09-26
      • 2016-04-02
      • 2020-01-14
      • 2014-04-04
      • 2013-07-09
      相关资源
      最近更新 更多