C# 如何将附件上载到服务器、Net Core+;反应(重复)

C# 如何将附件上载到服务器、Net Core+;反应(重复),c#,.net,reactjs,redux,.net-core,C#,.net,Reactjs,Redux,.net Core,我想添加一个附件,我使用.NETCore2.0和react(redux)。 在后端我有ORMDBF。这是一个模型: public byte[] Attachment { get; set; } 我的附件位于后端的字节[]。 这是我的代码: 功能: fileSelectedHandler = event => { this.setState({ attachment: event.target.files[0] }) } 建造商: this

我想添加一个附件,我使用.NETCore2.0和react(redux)。 在后端我有ORMDBF。这是一个模型:

    public byte[] Attachment { get; set; }
我的附件位于后端的字节[]。 这是我的代码: 功能:

   fileSelectedHandler = event => {
    this.setState({
        attachment: event.target.files[0]
    })
}
建造商:

 this.state = {
   attachment: null
 }
提交人:

    const fd = new FormData();
     const test = fd.append('attachment', this.state.attachment, 
     this.state.attachment.name);

     const reportData = {
            attachment: test
        };
    this.props.addReport(reportData, url);
不幸的是,它不起作用,我没有办法解决这个问题

解决方案:

    fileSelectedHandler = event => {
        let reader = new FileReader();
        reader.readAsDataURL(event.target.files[0]);
        if(event.target.files[0].size < 2097152){ // max 2mb files
            reader.onloadend = () => {
                this.setState({
                    attachment : reader.result.split(';base64,')[1]
                }) 
            };
        }
        else{
            tost.error('Plik powinien być mniejszy niż 2mb.'); // tost.error for file should be smaller than 2mb
            reader.onloadend = () => {
                this.setState({
                    attachment : null
                }) 
            };
        }
后端控制器:

    [AllowAnonymous]
    [HttpPost]
    public async Task<IActionResult> Add([FromBody] ReportDto reportDto)
    {
        var report = _mapper.Map<ReportDto, Report>(reportDto);

        var addedReport = await _service.AddReport(report);

        var uri = Request.PathBase.Value.ToString();

        return Created(uri, addedReport);
    }
[AllowAnonymous]
[HttpPost]
公共异步任务添加([FromBody]ReportDto ReportDto)
{
var report=\u mapper.Map(reportDto);
var addedReport=wait_service.AddReport(报告);
var uri=Request.PathBase.Value.ToString();
创建的返回(uri、addedReport);
}

ReportDto与上面的道具相同。

首先,您必须更改所选的文件附件以形成数据

function toFormData(file: File) {
    const data = new FormData();
    data.append("file", file);
    return data;
}
然后,您必须使用以下方式提交表单数据:

async function uploadFile(url: string, file: File, onProgress?: (progress: number) => void) {
    const data = toFormData(file);
    const xhr = new XMLHttpRequest();
    return new Promise((resolve, reject) => {
        if (typeof onProgress === "function") {
            xhr.upload.onprogress = event => {
                onProgress(event.loaded / event.total);
            };
        }

        xhr.onload = () => {
            let response;
            try {
                response = JSON.parse(xhr.response);
            } catch (err) {
                response = xhr.response;
            }

            if (xhr.status >= 200 && xhr.status < 300) {
                resolve(response);
                return;
            }
            reject(response);
        };

        xhr.onerror = err => {
            reject(err);
        };

        xhr.open("POST", url);
        xhr.send(data);
    });
}

我为我的问题找到了更好的方法。解决方案在我的帖子里。谢谢:)react中的附件类型是什么?
async function uploadFile(url: string, file: File, onProgress?: (progress: number) => void) {
    const data = toFormData(file);
    const xhr = new XMLHttpRequest();
    return new Promise((resolve, reject) => {
        if (typeof onProgress === "function") {
            xhr.upload.onprogress = event => {
                onProgress(event.loaded / event.total);
            };
        }

        xhr.onload = () => {
            let response;
            try {
                response = JSON.parse(xhr.response);
            } catch (err) {
                response = xhr.response;
            }

            if (xhr.status >= 200 && xhr.status < 300) {
                resolve(response);
                return;
            }
            reject(response);
        };

        xhr.onerror = err => {
            reject(err);
        };

        xhr.open("POST", url);
        xhr.send(data);
    });
}
[HttpPost]
[Route("Attachment")]
public async Task Attachment([FromForm] IFormFile file)
{
    // do sth with attachment
}