使用RestRequest发送xlsx文件至HTTP请求体后文件损坏问题求助
问题原因及解决方案
- 核心问题:你把二进制的Excel文件通过
ReadAsStringAsync()转换为字符串后再发送,这会破坏二进制数据的完整性,导致接收方收到损坏的文件。字符串编码无法正确还原二进制文件的所有字节。 - 正确的实现方式应该直接发送二进制流,避免字符串转换,同时规范异步方法的使用。
修正后的代码
public async Task<string> PostPostman() { try { string filePath = @"D:\example2.xlsx"; var client = new RestClient("https://api.xxx.com/v1/FileUpload"); var request = new RestRequest(Method.Post); // 添加认证头 request.AddHeader("Authorization", "Bearer xxxxxxxxxxxxx"); // 直接添加文件,RestSharp自动处理二进制流传输与Content-Type request.AddFile("file", filePath, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); RestResponse response = await client.ExecuteAsync(request); Console.WriteLine(response.Content); return response.Content; } catch (Exception ex) { Console.WriteLine(ex.Message); return ex.Message; } }
关键修改点
- 移除字符串转换操作:改用RestSharp内置的
AddFile方法,直接传输二进制文件流,避免编码损坏。 - 规范异步调用:将
client.Execute改为client.ExecuteAsync,用await替代.Result,避免异步阻塞和潜在死锁。 - 修正MIME类型:xlsx文件的标准MIME类型是
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,而非application/xlsx。 - 简化请求配置:无需手动设置请求体Content-Type,
AddFile会自动处理相关头信息。
内容的提问来源于stack exchange,提问作者M Wel
相关产品推荐
相关产品推荐

