我尝试使用POST将文件上传到FlashAir卡。有一个JavaScript-Example可用于我的机器:
cgi="http://flashair/upload.cgi";
$.ajax({ url: cgi,
type: "POST",
data: fd,
processData: false,
contentType: false,
success: function(html){
if ( html.indexOf("SUCCESS") ) {
alert("success");
getFileList(".");
}else{
alert("error");
}
}
});
我尝试用.NET实现同样的目标。这就是我所做的:
var cgi="http://flashair/upload.cgi";
byte[] bytes = File.ReadAllBytes(filename);
HttpContent bytesContent = new ByteArrayContent(fileData);
using (var client = new HttpClient())
{
using (var formData = new MultipartFormDataContent())
{
formData.Add(bytesContent, "file");
var response = client.PostAsync(command, formData).Result;
if (!response.IsSuccessStatusCode)
{
return false;
}
return true;
}
}
虽然第一个例子有效,但我的C#-Variant也会返回一个200 Code(需要一段时间才能让我想到文件正在上传),但文件没有保存。
知道可能导致问题的两个例子的区别在哪里?
答案 0 :(得分:0)
小提琴手让我走向了正确的方向。 JS和C#-Variant之间的一个区别是Header
Expect: 100-continue
仅出现在.NET变体上。这不容易删除。事实上,使用
来提示其他答案System.Net.ServicePointManager.Expect100Continue = false;
使用HttpClient时,似乎没有任何效果。所以我决定使用此代码的修改版本: https://stackoverflow.com/a/2996904
并添加以下行:
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
wr.ServicePoint.Expect100Continue = false;
这导致删除Expect-100标题并成功上传文件。