【问题标题】:Sending data inside the type file to the controller in ASP.NET MVC将类型文件中的数据发送到 ASP.NET MVC 中的控制器
【发布时间】:2018-10-13 15:45:27
【问题描述】:

我想发送一张照片来发布博客!

我在我的模型中定义了两个属性。一个是要存储在数据库中的照片名称,另一个是获取文件并保存到服务器(在资源文件夹中)。

这是我的模型代码:

[DataType(DataType.Upload)]
public HttpPostedFileBase File { get; set; }

public string BlogImage { get; set; }

这是我的 HTML 代码:

<div class="form-group col-sm-8">
                    <label for="BlogImage">Blog Image</label>
                    <input type="file" class="form-control" id="BlogImage">
                </div>

我想通过 AJAX 将文件发送到服务器。

 var myAdminBlog = {
    BlogImage: $("#BlogImage").val(),
    File: $("#BlogImage").val()
};

$.ajax({
    url: 'AddPostBlog',
    data: JSON.stringify(myAdminBlog),
    type: "POST",
    contentType: "application/json;charset=utf-8",
    dataType: "json",
    success: function (data) {
        alert(data);
    },
    error: function (errormessage) {
        alert(errormessage);
    }
});

这是我的 Ajax 代码。

终于可以看到控制器代码了。

 public JsonResult AddPostBlog(csAdminBlog myAdminBlog)
    { 
       int UploadMessage = UploadImage(myAdminBlog);
       return Json("Post Sended", JsonRequestBehavior.AllowGet);

    }

我的问题正是我不知道如何从 javascript 中获取文件。

我尝试使用 $("#BlogImage").val() 方法,但失败了。

注意:所有代码都运行良好,所有信息都发送到控制器,只有没有发送的项目是文件选项

【问题讨论】:

标签: jquery ajax asp.net-mvc file controller


【解决方案1】:

如果不需要在jQuery中,那么你可以使用document.getElementById(BlogImage).files[0]

像这样创建类

Public Class UploadFile
{
[DataType(DataType.Upload)]
public HttpPostedFileBase File { get; set; }

public string BlogImage { get; set; }

}

然后在javascript中

 var UploadFile= new Object();
 UploadFile.BlogImage = $("#BlogImage").val();
 UploadFile.File = document.getElementById(BlogImage).files[0];

$.ajax({
   url: 'AddPostBlog',
   data: JSON.stringify({uploadFile:UploadFile}),
   type: "POST",
   contentType: "application/json;charset=utf-8",
   dataType: "json",
   success: function (data) {
      alert(data);
   },
   error: function (errormessage) {
      alert(errormessage);
   }

});

在控制器方法中

 public JsonResult AddPostBlog(UploadFile uploadFile)
 { 
  //Your Code

}

【讨论】:

  • 感谢您花时间编写代码。但是我的问题没有解决。问题是放在文件(照片)中的数据没有发送到控制器。发送到数据库的唯一数据只是图像地址。 C://fakepath/myImage.png
  • 所以转成base64图片再发送
  • 你需要将你的图片转换为base64,然后存储在字段中:byte[] imageArray = System.IO.File.ReadAllBytes(@"image file path"); string base64ImageRepresentation = Convert.ToBase64String(imageArray);
  • 我说的有什么不同吗..?
  • @Dilip@Nikhil Ghuse 我需要将文件作为 HTTPPostedFileBase 发送。我在转换时会遇到问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 2020-10-21
相关资源
最近更新 更多