如何将映像从React上传到ASP.NET Core Web API?

问题描述 投票:1回答:1

我在mt服务器端有Web API控制器

[HttpPost("CreateImage")]
    public void CreateImage([FromBody] ImageDTO img)
    {
        Image image = new Image { FileName = img.FileName };
        byte[] imageData = null;
        using (var binaryReader = new BinaryReader(img.Image.OpenReadStream()))
        {
            imageData = binaryReader.ReadBytes((int)img.Image.Length);
        }
        image.Picture = imageData;

        imageRepo.Create(image);

    }

ImageDTO的位置

     public class ImageDTO
    {
        public string FileName { get; set; }

        public IFormFile Image { get; set; }
    }

和Image.cs是这样的

public class Image
   {
      public int Id { get; set; }

      public string FileName{ get; set; }

      public byte[] Picture { get; set; }

      public List<User> Users { get; set; }
   }

这就是我在React客户端处理和发送图像所使用的:

<form>
        <p>
            <label>Аватар</label>
            <input name="Avatar" id = 'img' type="file" class="form-control" onChange={(e)=>this.handleImageChange(e)}/>
        </p>
        <p>
            <input type="submit" value="Добавить" onClick={this.sendImage}/>
        </p>
</form>
      <div className="imgPreview">
      {$imagePreview}
    </div>

将文件处理成状态的功能

    handleImageChange(e) {
    e.preventDefault();
    let form = new FormData();
    for (var index = 0; index < e.target.files; index++) {
      var element = e.target.files[index];
      form.append('file', element);
  }
    this.setState({file: form});
  }

在服务器上发送它

async sendImage(event) {
event.preventDefault();

console.log(this.state.file);
await addImage(this.state.file);
console.log('it works');}

addImge函数:

addImage = async ( image)  => {

    await fetch('https://localhost:44331/api/users/CreateImage',
        {
            method: 'POST',
            mode: 'cors',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
                'Authorization': 'Bearer ' + sessionStorage.tokenKey
            },
             body:  JSON.stringify({
                FileName: 'Img',
                Image: image
            })
        }
    )
}

但是当它在服务器上发送请求时它返回错误400,这意味着“错误请求”。所以我认为这可能是错误的数据类型或类似的东西。也许有人看到了一个错误或可以修复的东西。或者有人可以展示将图像从React发送到Web Api服务器的工作示例。我需要你的帮助!

c# reactjs image-uploading asp.net-core-webapi
1个回答
1
投票

要上传,您需要注意以下几点:

  1. 你需要使用formdataFromForm
  2. formdata中的字段应与模型字段对应。

脚步:

  1. 更改Controller操作。 public void CreateImage([FromForm] ImageDTO img) { }
  2. 客户代码: async sendImage(event) { event.preventDefault(); console.log(this.state.file); await this.addImage(this.state.file); console.log('it works'); }; addImage = async (image) => { await fetch('https://localhost:44385/api/users/CreateImage', { method: 'POST', mode: 'cors', headers: { 'Accept': 'application/json', 'Authorization': 'Bearer ' + sessionStorage.tokenKey }, body: this.state.file } ) } handleImageChange(e) { e.preventDefault(); let form = new FormData(); for (var index = 0; index < e.target.files.length; index++) { var element = e.target.files[index]; form.append('image', element); } form.append('fileName', "Img"); this.setState({ file: form }); };
© www.soinside.com 2019 - 2024. All rights reserved.