C# 如何将附件上载到服务器、Net Core+;反应(重复)
我想添加一个附件,我使用.NETCore2.0和react(redux)。 在后端我有ORMDBF。这是一个模型: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
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
}