我想通过HTTP POST方法将文件作为byte []发送到另一台PC。从另一端的byte []组装文件的最有效方法是什么?我正在使用File.ReadAllBytes
方法从文件中获取byte []。
如果您使用tcp,网络协议将确保您的流顺序正确,没有丢弃部分。因此,最简单的读取流将是最有效的。如果要使用并行路由并使用数据报。如果文件很大,则必须以块的形式发送和接收文件。但是IP流可以隐藏这些信息。
这对我有用。我使用这种方法来调用api方法并将文件作为byte []发送。我尝试发送整个byte []但是api方法无法重现它。
private static async void SendFiles(string path)
{
var bytes = File.ReadAllBytes(path);
var length = bytes.Length;
foreach (var b in bytes)
{
length--;
string sendFilesUrl = $"http://api/communication/sendF/{b}/{length}";
StringContent queryString = new StringContent(bytes.ToString(), Encoding.UTF8, "application/x-www-form-urlencoded");
HttpResponseMessage response = await client.PostAsync(sendFilesUrl, queryString);
string responseBody = await response.Content.ReadAsStringAsync();
}
}
我的api方法是
[HttpPost]
[Route("sendF/{b}/{length}")]
public HttpResponseMessage SendF([FromUri]byte[] b, [FromUri]int length)
{
if(length != 0)
{
bytes.AddRange(b);
}
else
{
File.WriteAllBytes(@"G:\test\test.exe", bytes.ToArray<byte>());
}
return CreateResponse(client);
}
这段代码适合我,但如果文件很大,传递所有字节需要很长时间。目前我正在寻找更有效的发送字节方式。我想到的一个解决方案是以块的形式发送byte []