0

我有一个带有输入的表单,其值是图像的数据 URI,例如 "data:image/jpg;base64,/9j xxxxxxx...".

当用户使用它裁剪图像时,该值被赋予输入 - > http://fengyuanchen.github.io/cropper/ 所以在dragend事件中我用getDataURL填充输入值......

在表单提交时,数据进入控制器,在那里我使用 dataURI 来获取扩展名、base64 字符串等...

然后我将base64写入一个文件,如下所示:

fs.writeFile(fileRoot+filePathAndName, imageBase64, 'base64', function (err) { ...

一切都完美无缺。但是......当我使用更大的图像(> 500kb 所以不是那么大的事实)时,我得到了这个错误:

Unable to parse HTTP body- error occurred :: [Error: EUNFNTEX: Timed out waiting for known text parameters to finish streaming their bytes into the server.]

有趣的是它总是在 localhost 上工作 :( 即使是巨大的图像。

有谁知道我怎样才能完成这项工作?或者甚至更好地建议一种如何使用船长或优质服务来完成此操作的方法......

我在节点 v0.10.33 上使用 SailsJS v0.10.5

4

2 回答 2

1

我什么都试过了……客户坚持让它在客户端裁剪,我被base64图像卡住了……所以我找到了一个hacky解决方案……

内部风帆应用程序:node_modules/sails/node_modules/skipper/lib/Parser

我将prototype.parseReq.js第167行从:

var ms = 5;

到:

var ms = 100;

所以它现在看起来像:

function finally_waitForTextParams() {
  // Careful: No error argument allowed in this callback!

  debug('waiting for any text params');

  // Make sure the `impatient` timeout fires no more than once
  clearTimeout(timer);

  // Take a look at all currently known text params for this Upstream,
  // then wait until all of them have been read.
  var ms = 100;
  var numTries = 0;
  async.doUntil(
    function setTimer(cb) {


      // Catch-all timeout, just in case something goes awry.
      // Should never happen, but a good failsafe to prevent holding on to
      // control forever.  It this timeout was to fire, we should error out and
      // cancel things.
      numTries++;
      if (numTries > 10) {
        return cb(new Error(
          'EUNFNTEX: Timed out waiting for known text parameters to finish ' +
          'streaming their bytes into the server.'
        ));
      }

      setTimeout(cb, ms);

      // Exponential backoff
      // (multiply ms by 2 each time, up to 500)
      ms = ms < 500 ? ms * 2 : ms;

    }

我知道这不是一个好的解决方案。如果有人有更好的想法,请帮助:)

于 2015-01-27T15:20:32.580 回答
0

可能有很多事情......您的反向代理(如 nginx 或 cloudflare)正在阻止大量上传。正文解析器正在阻止大型 urlencoded/json 请求。

您应该做的是使用 multipart 或 xhr2/File API 上传图像。

于 2015-01-25T22:51:02.950 回答