javascript - 如何将 BLOB 添加到表单中?
问题描述
我正在尝试使用 MediaRecorder 录制音频文件,然后将录制的音频上传到服务器的磁盘。到目前为止,录制没有问题,我有可用的 BLOB。我要做的就是将文件附加到表单中,以便在单击提交按钮时可以在控制器中访问它。
我的 JavaScript 函数如下所示:
function sendData(data) {
var fd = new FormData(document.forms["form1"]);
fd.append("AudioFile", data, URL.createObjectURL(data));
不幸的是,它在我的控制器中不可用:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> NewTerm(NewTermViewModel model)
{
var files = HttpContext.Request.Form.Files;
我必须做什么才能访问控制器中的文件?
解决方案
这是一个关于传递 Blob 文件的链接。这是一个关于使用 formdata 传递 xxx.wav 文件的演示(您需要processData: false,contentType: false
在 ajax 中使用):
新术语视图模型:
public class NewTermViewModel
{
public string Name { get; set; }
public IList<IFormFile> AudioFile { get; set; }
}
新术语.cshtml:
<h1>NewTerm</h1>
<form id="myform">
@Html.AntiForgeryToken()
Name:<input asp-for="Name" />
</form>
<input type="file" id="soundFile">
<button onclick="sendData()">sendData</button>
@section scripts{
<script type="text/javascript">
function sendData() {
var files = $("#soundFile").get(0).files;
var form = document.forms["myform"];
var fd = new FormData(form);
fd.append('AudioFile', files[0]);
$.ajax({
type: 'POST',
url: 'GetAudio',
headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
data: fd,
processData: false,
contentType: false
}).done(function (data) {
console.log(data);
});
}
</script>
}
控制器:
[HttpGet]
public ActionResult NewTerm() {
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> GetAudio(NewTermViewModel model)
{
//var files = HttpContext.Request.Form.Files;
return Json("OK");
}
推荐阅读
- python - 如何使用 Textblob 循环情绪分析
- java - 使用 Webclient 将两个 api 响应合并为一个 - Webflux
- c++ - C++:如何初始化类模板的自定义成员的静态向量?
- html - 使用 my-auto 的引导垂直居中不起作用
- python-3.x - 有人可以解释为什么 Python 解释器在这种使用装饰器的情况下不会感到困惑吗?
- python-3.x - 正则表达式:提取由“-”(减号)字符分隔的字母数字序列
- html - 这个以 HTML/CSS 设计的捐赠进度条在进度条达到 90% 以上时会中断。随着栏的增加,我如何让文本保持原位或缩小?
- c# - 输入登录凭据后尝试启用某些按钮,但我的代码不起作用
- python-3.x - Groupby 确定每个组的最短日期
- azure - Azure 语音服务 CLI,使用 SSML 错误代码:1007