我在.Net Core中有一个服务,该服务将IFormFile作为参数。我想将数据从此IFormFile发送到Api。下面的代码是邮递员为我的请求自动生成的代码。在“ attachmentRequest.AddFile(“ file”,file);”中行,文件是邮递员从中上传文件的本地路径的字符串。将IFormfile作为发送的文件发送的最佳方法是什么?我是否使用流并将IFormfile保存到.Net Core中的某个位置并传递该地址?
public async Task<bool> PostIssue(IFormFile file)
{
var client = new RestClient("https://sample/10000/attachments");
client.Timeout = -1;
var attachmentRequest = new RestRequest(Method.POST);
attachmentRequest.AddHeader("X-Atlassian-Token", "no-check");
attachmentRequest.AddHeader("Authorization", "Basic xxxxxxxxxxxxxx=");
attachmentRequest.AddHeader("Cookie", "atlassian.xsrf.token=xxxxxxxxxxxxxxxxxx_lin");
attachmentRequest.AddFile("file", file);
IRestResponse attachmentResponse = client.Execute(attachmentRequest);
Console.WriteLine(attachmentResponse.Content);
if (attachmentResponse.IsSuccessful)
{
return true;
}
else
{
return false;
}
}
您使用AddFile
的第二种方法:
public IRestRequest AddFile (string name, byte [] bytes, string fileName, string contentType = null);
将IFormFile文件转换为byte array
格式,而不是获取传输文件的路径。
您所说的确实可以使用流上传到本地,但这是一个额外的操作,您可以将IFormFile直接操作为字节形式并将其传输到API,如下所示:
public async Task<bool> PostIssue(IFormFile file)
{
var client = new RestClient("http://localhost:50855/Users");
client.Timeout = -1;
var attachmentRequest = new RestRequest(Method.POST);
attachmentRequest.AddHeader("X-Atlassian-Token", "no-check");
attachmentRequest.AddHeader("Authorization", "Basic xxxxxxxxxxxxxx=");
attachmentRequest.AddHeader("Cookie", "atlassian.xsrf.token=xxxxxxxxxxxxxxxxxx_lin");
using (var ms = new MemoryStream())
{
file.CopyTo(ms);
var fileBytes = ms.ToArray();
attachmentRequest.AddFile("filename",fileBytes, file.FileName);
}
IRestResponse attachmentResponse = client.Execute(attachmentRequest);
Console.WriteLine(attachmentResponse.Content);
if (attachmentResponse.IsSuccessful)
{
return true;
}
else
{
return false;
}
}
Api:
public async Task<IActionResult> attachments()
{
var file = Request.Form.Files["filename"]; //get the file
//do something you want
return Ok();
}
这里是测试结果: