Postman 发送json和image格式的数据

l0oc07j2  于 2022-11-07  发布在  Postman
关注(0)|答案(4)|浏览(332)

我已经创建了一个API,它正在数据库中添加数据,带有值和图像。
在postman中,我调用了它,并在表单中设置了image-data和JSON中的其他原始值,但在image中,我仍然在源代码对象中得到了空值。
我需要两件事的帮助:
1.为什么我在源代码中的图像值为空,请检查下面的图像。
1.我如何发送图像和数据使用 Postman ,检查下面的截图是确定我已经尝试了什么?
第一个屏幕截图是postman,我在其中以json格式发送数据:

第二个屏幕截图是 Postman ,我在 Postman 的同一个请求中发送图像

现在在第三个图像中,您可以看到在图像中,它显示的是Null而不是值。

所以我不明白为什么图像是空的..下面是代码

public async Task<int> Create(UserPreference _object)
{
   if(_object.Image != null)
   {
       var webRootPath = hostingEnv.WebRootPath;
       var fileName = Path.GetFileName(_object.Image.FileName);
       var filePath = Path.Combine(hostingEnv.WebRootPath, "images\\User", fileName);

       using(var fileStream = new FileStream(filePath, FileMode.Create))
       {
          await _object.Image.CopyToAsync(fileStream);
       }

       _object.ImagePath = filePath;
   }

   var obj = await applicationDbContext.UserPreferences.AddAsync(_object);
   return applicationDbContext.SaveChanges();
}

[HttpPost]
[Route("CreateUserPreference")]
public async Task<ActionResult> CreateUserPreference([FromBody] UserPreference userPreference)
{
   if (ModelState.IsValid)
   {
      try
      {
         var userPreferenceId = await _userPreference.Create(userPreference);
         if (userPreferenceId > 0)
             return Ok("User Preference has added");
      }
      catch(Exception)
      {
         return BadRequest();
      }
  }
  return BadRequest();
}

 [Display(Name = "Name")]
        public string Name { get; set; } = "";

        [Display(Name = "Location")]
        public string Location { get; set; } = "";

        [Display(Name = "Date of Birth")]
        public DateTime DateOfBirth { get; set; }

        [Display(Name = "About Me")]
        public string AboutMe { get; set; } = "";

        [Display(Name = "Match Preference")]
        public string MatchPreference { get; set; } = "";

        [Display(Name = "Play Score")]
        public string PlayScore { get; set; } = "";

        [Display(Name = "Location")]
        public string LocationPreference { get; set; } = "";

        [Display(Name = "CreatedOn"), DataType(DataType.Date)]
        public DateTime CreatedOn { get; set; } = DateTime.Now;

        [Display(Name ="Upload Photo")]
        public string ImagePath { get; set; } = "";

        [NotMapped]
        public IFormFile Image { get; set; }

        [ForeignKey("User")]
        public int UserId { get; set; }
        public virtual User User { get; set; }
h7appiyu

h7appiyu1#

x1c 0d1x您不能同时发送form-data和JSON正文。要解决您的问题,请将图像和其他信息作为form-date发送。有关详细信息,请参阅屏幕截图

72qzrwbm

72qzrwbm2#

若要使用Postman发送图像和数据,必须使用表单数据内容类型。
选择body =〉form-data。列键有一个选择器。对于文件,选择file-type和选择file。要同时发送数据,你必须在键值对中分隔json。
并从动作中移除[FromBody]属性,它只用于Content-Type:application/json,但您的内容类型:多部分/表格数据;

q1qsirdb

q1qsirdb3#

Postman不允许您像这样同时发送两种不同的表单类型。您的问题是发送JSON有效负载 * 或 * 图像的二进制内容。
因此,请将file * 和 * JSON有效负载添加到form-data屏幕,如下所示:

Postman将自动设置Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW头,然后处理实际正文,如下所示:

----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="image"; filename="/C:/Users/xyz/Downloads/hystrix-dashboard-netflix-api-example-iPad.png"
Content-Type: image/png

(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="data"
k2arahey

k2arahey4#

[ASP.NET核心框架]
假设你想在body请求中发送一个文件(图像),在同一个body中包含更多的属性,在这种情况下,我强烈建议在API中的object参数之前使用属性[FromForm],比如下面的例子:

如果你想通过post-man测试你的API,你必须使用body和form-data类型。对于你的文件/图像给予属性名,并在键端选择“文件”类型,在值端,通过点击“选择文件”选择文件,对其他属性执行相同的操作,键=属性名,值为它们的值(可以是字符串、双精度型......等等)。如下例所示:

相关问题