Ibm cloud 如何将PDF发送给Watson';没有先将文档写入磁盘的情况下的文档转换服务?

Ibm cloud 如何将PDF发送给Watson';没有先将文档写入磁盘的情况下的文档转换服务?,ibm-cloud,ibm-watson,document-conversion,Ibm Cloud,Ibm Watson,Document Conversion,我正在尝试使用Watson developer cloud node.js库转换为Watson文档转换服务中的应答单元 在实际的程序(不是这个测试程序)中,我检索文档并动态转换它,而不首先将其写入磁盘。我以前在其他文档中也这样做过,但最新版本的库(v1.7.0)似乎已经改变,不再像我使用它时那样工作。但即使在我开始使用最新版本之前,这个特定文档也不会转换 下面是我正在使用的带注释的测试代码。我已经尝试了几种方法来实现这一点,它们的变体都在下面的var opts={下注释掉了。您必须一次取消其中一

我正在尝试使用Watson developer cloud node.js库转换为Watson文档转换服务中的应答单元

在实际的程序(不是这个测试程序)中,我检索文档并动态转换它,而不首先将其写入磁盘。我以前在其他文档中也这样做过,但最新版本的库(v1.7.0)似乎已经改变,不再像我使用它时那样工作。但即使在我开始使用最新版本之前,这个特定文档也不会转换

下面是我正在使用的带注释的测试代码。我已经尝试了几种方法来实现这一点,它们的变体都在下面的var opts={下注释掉了。您必须一次取消其中一种注释才能看到结果

'use strict';
var bluemix = require('./bluemix');
var extend=require('util')._extend;
var fs=require('fs');
var watson=require('watson-developer-cloud');
var streams = require('memory-streams');

var dcCredentials =  extend({
  url: '<url>',
  version: 'v1',
  username: '<username>',
  password: '<password>'
}, bluemix.getServiceCreds('document_conversion')); // VCAP_SERVICES
var document_conversion = watson.document_conversion(dcCredentials);

var bookpdf=getBook('ga195486.pdf'); 
convert(bookpdf);

function getBook(filename)
   {
   var bl=fs.readFileSync(filename,'utf8');
   return bl;
   }

function convert(content)
   {
   var opts={ //uncomment ONE of these
//      file: new Buffer(content), //See message #1 below
//      file: {value: new Buffer(content), options: {}}, //see message #2 below
//      file: {value: new Buffer(content), options: {contentType: "application/pdf"}}, //This used to work. See message #2 (again) below
//      file: new streams.ReadableStream(content),//see message #3 below
      conversion_target: "ANSWER_UNITS",
      content_type:'application/pdf'
      };
   document_conversion.convert(opts,
      function (err, response) 
         {
         if (err) 
            {
            console.log("Error converting doc: ", err);
            }
         else if (response.answer_units.length==0)
            {
            var msg="No answer units";
            console.log(msg,response);
            }
         else 
            {
            console.log('Works!');
            console.dir(response);
            }
         }
      );
   }

//Message #1: This returns: 
//  No answer units { source_document_id: '',
//  timestamp: '2016-05-23T16:18:23.825Z',
//  media_type_detected: 'application/pdf',
//  metadata: [],
//  answer_units: [],
//  warnings: 
//   [ { phase: 'pdf',
//       warning_id: 'empty_input_to_converter',
//       description: 'The input provided to the converter phase is empty or doesn\'t contain text that can be converted.' },
//     { phase: 'normalized_html',
//       warning_id: 'empty_input_to_converter',
//       description: 'The input HTML document has no body content.' },
//     { phase: 'answer_units',
//       warning_id: 'empty_input_to_converter',
//       description: 'The input provided to the converter phase is empty or doesn\'t contain text that can be converted.' } ] }


//Message #2: These return:
///home/david/git/ccb-contentbridge/node_modules/watson-developer-cloud/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js:33
//  source.on('error', function() {});
//
//TypeError: source.on is not a function
//    at Function.DelayedStream.create (/home/david/git/ccb-contentbridge/node_modules/watson-developer-cloud/node_modules/request/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js:33:10)
//    at FormData.CombinedStream.append (/home/david/git/ccb-contentbridge/node_modules/watson-developer-cloud/node_modules/request/node_modules/combined-stream/lib/combined_stream.js:43:37)
//    at FormData.append (/home/david/git/ccb-contentbridge/node_modules/watson-developer-cloud/node_modules/request/node_modules/form-data/lib/form_data.js:68:3)
//    at appendFormValue (/home/david/git/ccb-contentbridge/node_modules/watson-developer-cloud/node_modules/request/request.js:339:21)
//    at Request.init (/home/david/git/ccb-contentbridge/node_modules/watson-developer-cloud/node_modules/request/request.js:352:11)
//    at new Request (/home/david/git/ccb-contentbridge/node_modules/watson-developer-cloud/node_modules/request/request.js:142:8)
//    at request (/home/david/git/ccb-contentbridge/node_modules/watson-developer-cloud/node_modules/request/index.js:55:10)
//    at createRequest (/home/david/git/ccb-contentbridge/node_modules/watson-developer-cloud/lib/requestwrapper.js:134:10)
//    at DocumentConversion.convert (/home/david/git/ccb-contentbridge/node_modules/watson-developer-cloud/services/document_conversion/v1.js:134:10)
//    at convert (/home/david/git/ccb-contentbridge/testRedbooks.js:35:24)


//Message #3: This returns and then it hangs there:
//Error converting doc:  { code: 400, error: 'Error in the web application' }
“严格使用”;
var bluemix=require('./bluemix');
var extend=require('util')。\u extend;
var fs=需要('fs');
var watson=require('watson-developer-cloud');
var-streams=require('memory-streams');
var dcCredentials=extend({
url:“”,
版本:“v1”,
用户名:“”,
密码:“”
},bluemix.getServiceCreds('document_conversion');//VCAP_服务
var document\u conversion=watson.document\u conversion(dcCredentials);
var bookpdf=getBook('ga195486.pdf');
转换(PDF格式);
函数getBook(文件名)
{
var bl=fs.readFileSync(文件名为'utf8');
返回bl;
}
函数转换(内容)
{
var opts={//取消对其中一个的注释
//文件:新建缓冲区(内容),//请参阅下面的消息#1
//文件:{value:newbuffer(content),选项:{},//参见下面的消息#2
//文件:{value:newbuffer(content),选项:{contentType:“application/pdf”}},//这是用来工作的。请参阅下面的消息#2(再次)
//文件:new streams.ReadableStream(content),//参见下面的消息#3
转换目标:“回答单位”,
内容类型:'application/pdf'
};
文件转换。转换(选项,
功能(错误、响应)
{
如果(错误)
{
console.log(“转换文档时出错:”,err);
}
else if(response.answer\u units.length==0)
{
var msg=“无应答单元”;
日志(消息,响应);
}
其他的
{
console.log('Works!');
console.dir(应答);
}
}
);
}
//消息#1:返回:
//无应答单元{source\u document\u id:'',
//时间戳:“2016-05-23T16:18:23.825Z”,
//检测到媒体类型:'application/pdf',
//元数据:[],
//答复(单位:[],,
//警告:
//[{阶段:'pdf',
//警告\u id:“空\u输入\u到\u转换器”,
//描述:“提供给转换器阶段的输入为空或不包含可转换的文本。”,
//{阶段:'normalized_html',
//警告\u id:“空\u输入\u到\u转换器”,
//description:'输入HTML文档没有正文内容。'},
//{阶段:'回答单位',
//警告\u id:“空\u输入\u到\u转换器”,
//描述:“提供给转换器阶段的输入为空或不包含可转换的文本。”}]}
//信息#2:这些返回:
///home/david/git/ccb contentbridge/node_modules/watson developer cloud/node_modules/request/node_modules/combined stream/node_modules/delayed stream/lib/delayed_stream.js:33
//on('error',function(){});
//
//TypeError:source.on不是函数
//在Function.DelayedStream.create(/home/david/git/ccb contentbridge/node_modules/watson developer cloud/node_modules/request/node_modules/combined stream/node_modules/delayed stream/lib/delayed_stream.js:33:10)
//在FormData.CombinedStream.append(/home/david/git/ccb contentbridge/node_modules/watson developer cloud/node_modules/request/node_modules/combined stream/lib/combined_stream.js:43:37)
//在FormData.append(/home/david/git/ccb contentbridge/node_modules/watson developer cloud/node_modules/request/node_modules/form data/lib/form_data.js:68:3)
//在appendFormValue(/home/david/git/ccb contentbridge/node_modules/watson developer cloud/node_modules/request/request.js:339:21)
//at Request.init(/home/david/git/ccb contentbridge/node_modules/watson developer cloud/node_modules/Request/Request.js:352:11)
//应新请求(/home/david/git/ccb contentbridge/node_modules/watson developer cloud/node_modules/Request/Request.js:142:8)
//应请求(/home/david/git/ccb contentbridge/node_modules/watson developer cloud/node_modules/request/index.js:55:10)
//在createRequest(/home/david/git/ccb contentbridge/node_modules/watson developer cloud/lib/requestwrapper.js:134:10)
//在DocumentConversion.convert(/home/david/git/ccb contentbridge/node_modules/watson developer cloud/services/document_conversion/v1.js:134:10)
//转换时(/home/david/git/ccb contentbridge/testRedbooks.js:35:24)
//消息#3:返回,然后挂起:
//转换文档时出错:{code:400,错误:“web应用程序中的错误”}

有人能告诉我我做错了什么吗?

该特定文件比文档转换服务当前可以处理的文件要大。不幸的是,我现在没有很好的关于限制的确切信息,但是团队意识到了这一点,并正在寻求改进

如果您可以提供一个以前可以使用但与node.js库的v1.7.0不兼容的示例,我将对此进行研究,希望能够提供更好的信息


哦,在
fs.readfileSync()上指定
'utf8'
调用可能会导致您遇到一些问题。

看起来Doc Con的限制是50 MB,我们的文档小于50 MB…一定是其他问题。

我正在看这个问题。您是否有一个在v1.7.0之前有效但在v1.7.0之后不再有效的示例?