我正在尝试将单触式 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;
}
然后我使用各种不同的方法将其发布到我的服务器,包括: 使用 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;