1

我正在尝试将单触式 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;
4

1 回答 1

0

更新

修复。我现在改用 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;
于 2013-02-14T06:33:55.803 回答