gpt4 book ai didi

c# - 在 C# 中使用 HttpWebRequest 来模拟curl POST 多部分表单

转载 作者:太空宇宙 更新时间:2023-11-04 02:41:36 26 4
gpt4 key购买 nike

我正在尝试将单触摸中的 UIImage 上传到我的服务器(nodeJS)。

我已经尝试了在 SO 和网络上其他地方找到的所有可能的解决方案,但均无济于事。

基本上我有一个 UIImage,我使用以下方法将其转换为 byte[]:

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;
}

然后我使用各种不同的方法将其发布到我的服务器,包括: Upload files with HTTPWebrequest (multipart/form-data)

当我尝试使用 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;

最佳答案

更新

已修复。我现在改用 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;

关于c# - 在 C# 中使用 HttpWebRequest 来模拟curl POST 多部分表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14620683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com