在C#中使用HttpWebRequest发布多部分表单以模拟curl
我正在尝试将monotouch中的UIImage上载到我的服务器(nodeJS) 我尝试了在SO和网上其他地方找到的所有可能的解决方案,但都没有结果 基本上,我有一个UIImage,我正在使用以下方法将其转换为字节[]:在C#中使用HttpWebRequest发布多部分表单以模拟curl,c#,node.js,xamarin.ios,multipartform-data,express,C#,Node.js,Xamarin.ios,Multipartform Data,Express,我正在尝试将monotouch中的UIImage上载到我的服务器(nodeJS) 我尝试了在SO和网上其他地方找到的所有可能的解决方案,但都没有结果 基本上,我有一个UIImage,我正在使用以下方法将其转换为字节[]: public byte[] GetMergedBytes(UIImage img) { byte[] filedata = null; using (NSData imageData = img.AsPNG()) {
public byte[] GetMergedBytes(UIImage img)
{
byte[] filedata = null;
using (NSData imageData = img.AsPNG()) {
filedata = new byte[imageData.Length];
System.Runtime.InteropServices.Marshal.Copy (imageData.Bytes, filedata, 0, Convert.ToInt32 (imageData.Length));
}
return filedata;
}
然后,我使用各种不同的方法将其发布到我的服务器,包括:
当我尝试使用CURL时,我的服务器会正确响应:
curl -F "fileupload=@logo.png" -F "name=blah" http://xxx.xxx.xxx.xx/upload
最后,我将nodeJS与expressJS结合使用:
app.post('/upload', function(req, res, files) {
console.log(req.files);
console.log(files);
}
使用CURL,我从服务器上的console.log获得以下信息:
{ fileupload:
{ domain: null,
_events: null,
_maxListeners: 10,
size: 88270,
path: '/tmp/9ab5c9b1ea6da91e4e16ea711636b9bb',
name: 'logo.png',
type: 'application/octet-stream',
hash: false,
lastModifiedDate: Thu Jan 31 2013 07:26:43 GMT+0000 (UTC),
_writeStream:
{ domain: null,
_events: null,
_maxListeners: 10,
path: '/tmp/9ab5c9b1ea6da91e4e16ea711636b9bb',
fd: 9,
writable: false,
flags: 'w',
encoding: 'binary',
mode: 438,
bytesWritten: 88270,
busy: false,
_queue: [],
_open: [Function],
drainable: true },
length: [Getter],
filename: [Getter],
mime: [Getter] } }
对于任何其他方法,相同的console.log
返回:
{}
有什么想法吗?我都快疯了
更新
修好了。我现在使用的是RestSharp,它就像一个魔咒,只需要很少的代码行
byte[] filedata = GetFileBytes(file);
var client = new RestClient ("http://server");
var request = new RestRequest ("upload", Method.POST);
request.AddParameter("name", "parameter1);
request.AddParameter("name2", id);
request.AddFile("file", filedata, "somename.png", "image/png");
RestResponse response = (RestResponse)client.Execute(request);
var content = response.Content;
return content;
byte[] filedata = GetFileBytes(file);
var client = new RestClient ("http://server");
var request = new RestRequest ("upload", Method.POST);
request.AddParameter("name", "parameter1);
request.AddParameter("name2", id);
request.AddFile("file", filedata, "somename.png", "image/png");
RestResponse response = (RestResponse)client.Execute(request);
var content = response.Content;
return content;
更新
修好了。我现在使用的是RestSharp,它就像一个魔咒,只需要很少的代码行
byte[] filedata = GetFileBytes(file);
var client = new RestClient ("http://server");
var request = new RestRequest ("upload", Method.POST);
request.AddParameter("name", "parameter1);
request.AddParameter("name2", id);
request.AddFile("file", filedata, "somename.png", "image/png");
RestResponse response = (RestResponse)client.Execute(request);
var content = response.Content;
return content;
byte[] filedata = GetFileBytes(file);
var client = new RestClient ("http://server");
var request = new RestRequest ("upload", Method.POST);
request.AddParameter("name", "parameter1);
request.AddParameter("name2", id);
request.AddFile("file", filedata, "somename.png", "image/png");
RestResponse response = (RestResponse)client.Execute(request);
var content = response.Content;
return content;
我还使用了流行的:您可以将更新移动到答案中,并将您的问题标记为已回答(在stackoverflow上回答您自己的问题完全可以,请参阅常见问题)。这样,搜索类似问题的其他人将看到答案可用(因此,这样更有帮助)。欢迎来到SO!