我试着用POST将一个文件上传到FlashAir卡。在我的机器上有一个可用的JavaScript示例:
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#-变量也返回了一个200代码(并且花费了一段时间,这让我认为文件正在上传),但是文件没有保存。
你知不知道这两个可能导致问题的例子有何不同?
发布于 2016-04-27 20:34:30
费德勒把我引向了正确的方向。JS和C#变体之间的一个不同之处是头部。
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头被删除,文件被成功上传。
https://stackoverflow.com/questions/36850050
复制相似问题