【问题标题】:jQuery read byte[] from type="file" input box on submitjQuery 在提交时从 type="file" 输入框中读取字节 []
【发布时间】:2020-03-20 14:15:45
【问题描述】:

我有一个自定义输入字段,我想在其中上传文件。

<form class="submitform">
    <div class="input-group">
            <input type="file" class="custom-file-input" id="fileInput"
                   aria-describedby="fileInput" />
            <label class="custom-file-label" for="fileInput">Choose file</label>
    </div>
    <div class="modal-footer row">
        <button type="submit" class="btn btn-primary" id="submitAddFile">Submit</button>
        </div>
    </div>
</form>

一旦按下表单中的提交按钮,我想分别获取文件名和字节[]。 我尝试通过 jQuery 以下列方式进行:

$('#submitAddFile').click(function () {
    var file = $('#fileInput')[0].files;
    debugger;
}

然后我没有进一步了解.. 从我可以通过调试读取的内容来看,我没有得到任何可以拉出并发送到我的控制器的字节 []。然而,我能够得到一些东西,比如文件大小和文件名。

因此,我如何正确提取 byte[] 以便将其存储在我的数据库中

【问题讨论】:

  • 你把事情复杂化了。只需将文件发送到服务器(通过提交表单或 AJAX),您的 ASP.Net 操作将为您处理文件的二进制数据,您只需将其保存在某处。
  • 对,还不如这样做!这是什么类型的帖子?
  • 您能对此提供更多解释吗?
  • 当然,here's 如何使用普通表单(您现在拥有)。 Here 是如何使用 jQuery AJAX 实现的
  • 但这在 .net Core 中有效吗? Request.File 方法在此处不可用。我试着做同样的事情,但我仍然没有击中我的控制器。

标签: jquery html asp.net-core-mvc


【解决方案1】:

您可以使用表单提交或使用ajax发布表单并使用IFormFile操作来接收您的文件。在操作中,您可以获取文件名或将文件转换为byte[]

动作参数的名称必须与表单数据的名称相匹配。

例如:

Js:

<script>
    $('#submitAddFile').click(function (e) {
        e.preventDefault();
        var file = $('#fileInput')[0].files;
        var formData = new FormData();
        formData.append("myFile", file[0]);


        $.ajax({
            type: "POST",
            url: "/Home/UploadFile",
            contentType: false,
            processData: false,
            data: formData,
            success: function (result) {
                alert("success");
            },
            error: function () {
                alert("there was an error");
            }
        });
    })
</script>

家庭控制器:

[HttpPost]
public void UploadFile(IFormFile myFile)
    {
        var fileName = Path.GetFileName(myFile.FileName);
        using (var ms = new MemoryStream())
        {
            myFile.CopyTo(ms);
            byte[] fileBytes = ms.ToArray();

            //save fileName and fileBytes into database
        }       

    }

【讨论】:

  • 谢谢!你能告诉我,你为什么要使用 MemoryStream?在什么情况下这是必要的?我可以看到它没有
  • @Jeppe Christensen 请参阅stackoverflow.com/questions/36432028/…。或者您可以使用任何其他将 IFormFile 转换为 byte[] 的方法。
猜你喜欢
  • 2011-08-13
  • 2023-03-17
  • 2012-03-16
  • 2011-09-06
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
相关资源
最近更新 更多