使用 AJAX 将图像上传到 ASP.NET 核心应用
Uploading image to ASP.NET Core app using AJAX
我是 jQuery 和 AJAX 的新手,我正在尝试使用它上传图片到我的服务器。我有一个简单的 html 页面
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="script.js"></script>
<form method="post" enctype="multipart/form-data">
Select image to upload:
<input id="profilePic" name="picture" type="file" size="1" onchange="uploadFile('profilePic');" />
</form>
其中脚本文件是
function uploadFile(inputId) {
var fileUpload = $("#" +inputId).get(0);
var files = fileUpload.files;
var formData = new FormData();
formData.append(files[0].name, files[0]);
$.ajax({
url: '/Image/File',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function (result) {
}
});
在我名为 ImageController 的控制器中,我有一个名为 File 的 POST 方法,它采用零参数:
[HttpPost]
public IActionResult File()
{
var file = Request.Form.Files[0];
if (file != null)
{
//work
}
return null;
}
但每次我提交图像以形成任何反应时,我都会收到代码 500:内部服务器错误,无法加载资源。我在我的代码中放置了断点,但它从未进入 File 方法。我究竟做错了什么? html页面和脚本位于 wwwroot,控制器在 Controllers 文件夹中。
首先,您的操作应将图像作为参数:
// Don't use `File` here. You're hiding the base `File` method.
public IActionResult FileUpload(IFormFile file)
{
// Always check content length
if (file?.ContentLength > 0)
{
//work
}
return null;
}
然后,在你的JS中,FormData.append
的第一个参数应该是数据名,而不是文件名。因为动作参数是file
,这里的名字也应该是file
:
formData.append('file', files[0]);
我是 jQuery 和 AJAX 的新手,我正在尝试使用它上传图片到我的服务器。我有一个简单的 html 页面
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="script.js"></script>
<form method="post" enctype="multipart/form-data">
Select image to upload:
<input id="profilePic" name="picture" type="file" size="1" onchange="uploadFile('profilePic');" />
</form>
其中脚本文件是
function uploadFile(inputId) {
var fileUpload = $("#" +inputId).get(0);
var files = fileUpload.files;
var formData = new FormData();
formData.append(files[0].name, files[0]);
$.ajax({
url: '/Image/File',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function (result) {
}
});
在我名为 ImageController 的控制器中,我有一个名为 File 的 POST 方法,它采用零参数:
[HttpPost]
public IActionResult File()
{
var file = Request.Form.Files[0];
if (file != null)
{
//work
}
return null;
}
但每次我提交图像以形成任何反应时,我都会收到代码 500:内部服务器错误,无法加载资源。我在我的代码中放置了断点,但它从未进入 File 方法。我究竟做错了什么? html页面和脚本位于 wwwroot,控制器在 Controllers 文件夹中。
首先,您的操作应将图像作为参数:
// Don't use `File` here. You're hiding the base `File` method.
public IActionResult FileUpload(IFormFile file)
{
// Always check content length
if (file?.ContentLength > 0)
{
//work
}
return null;
}
然后,在你的JS中,FormData.append
的第一个参数应该是数据名,而不是文件名。因为动作参数是file
,这里的名字也应该是file
:
formData.append('file', files[0]);