从 Node.js 应用程序而不是网站调用具有 FormData 'PostFiles'终结点



我有一个端点,文件从网站发送到该网站 - 通过<input>字段。角度代码看起来像这样...

@Injectable()
export class FileUploadService {
constructor(private http: HttpClient) { }
uploadFiles(files: any): Promise<void> {
return new Promise<void>(async (resolve, reject) => {
var formData = new FormData();
for (let file of files)
formData.append(file.name, file);
const uploadReq = new HttpRequest('POST', `localhost:4200/api/postfiles`, formData, {
reportProgress: true,
});
this.http.request(uploadReq).subscribe(event => {
if (event.type === HttpEventType.UploadProgress)
{
console.log(`Progress: ${Math.round(100 * event.loaded / event.total)}`);
}
else if (event.type === HttpEventType.Response)
console.log(`Done`);
resolve();
});
});
}
}

。和像这样的 C# endoint...

[AllowAnonymous]
[HttpPost("[action]")]
[RequestSizeLimit(2147483640)]
public async Task<IActionResult> PostFiles()
{
try
{
IFormFileCollection files = Request.Form.Files;
if (files == null || files.Count == 0)
{
return BadRequest("No files received");
}
var blobs = new List<FileBlob>();
foreach (var formFile in files)
{
//formFile.
if (formFile.Length > 0)
{
var stream = new MemoryStream();
await formFile.CopyToAsync(stream);
blobs.Add(new FileBlob(formFile.FileName, stream));
}
}
if (await _blobStorage.SaveFilesAsync(blobs, "relativeTestPath"))
{
return Ok();
}
return BadRequest("Files could not be stored");
}
catch (Exception exp)
{
Debug.WriteLine("Exception generated when uploading file - " + exp.Message);
string message = $"file / upload failed!";
return BadRequest(message);
}
}

现在我想从 Node.js 应用程序调用相同的端点,该应用程序通过

fs.readFileSync() 

方法,但我不知道如何准备文件内容并将其发布到同一个"PostFiles"端点。

知道吗?

因此,解决方案(简而言之(是为此创建一个端点,而忘记FormData:

filecontent = fs.readFileSync(filepath, {encoding: 'base64'));

在正文中发布文件内容(忘记FormData(。在后端:

public async Task<IActionResult> PostFiles([FromBody] string fileContent) 
{
var bytes = Convert.FromBase64String(fileContent);
var stream = new MemoryStream(bytes);
//save it anywhere
}

最新更新