モノタッチで UIImage をサーバー (nodeJS) にアップロードしようとしています。
SOやネット上の他の場所で見つかったすべての可能な解決策を試しましたが、役に立ちませんでした。
基本的に、次を使用して byte[] に変換する UIImage があります。
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
完了するために、私はexpressJSでnodeJSを使用しています:
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;