【发布时间】:2023-03-22 15:19:01
【问题描述】:
我在内存中有一个 CSV 文件,我想上传到 Web API。
如果我将 CSV 文件保存到磁盘并上传,它就会被接受。
但是,我想避免额外的工作,并通过简单地将我拥有的文本作为 MemoryStream 对象上传来使代码更简洁(我认为这是正确的格式?)。
以下代码用于上传文件:
string webServiceUrl = "XXX";
string filePath = @"C:\test.csv";
string cred = "YYY";
using (var client = new WebClient()){
client.Headers.Add("Authorization", "Basic " + cred);
byte[] rawResponse = client.UploadFile(webServiceUrl, "POST", filePath);
Console.WriteLine(System.Text.Encoding.ASCII.GetString(rawResponse));
}
如果我有一个包含所有内容的字符串,并且我想以相同的方式上传它而不必将其保存到文件中,我该怎么办?
WebClient.UploadData 或 WebClient.UploadString 可能吗?
谢谢
编辑:
我尝试了你所说的,但使用了本地文件(以防字符串有问题),但我得到了同样的错误。
我认为代码将使用您的解决方案
string webServiceUrl = "XXX";
string file = @"C:\test.csv";
string cred = "YYY";
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
byte[] postArray = r.ReadBytes((int)fs.Length);
using (var client = new WebClient())
{
client.Headers.Add("Authorization", "Basic " + cred);
using (var postStream = client.OpenWrite(webServiceUrl, "POST"))
{
postStream.Write(postArray, 0, postArray.Length);
}
}
有什么想法吗?
【问题讨论】:
-
使用 WebClient UploadData 覆盖之一。传入 MemoryStream 的 ToArray 作为 byte[] 参数。