javascript - 为什么我的nodejs pdf上传代码返回Status 415 "unsupported Media Type"

标签 javascript node.js pdf hapi.js

嘿,我正在使用 Node.js 框架 Hapi.js 制作一个简单的文件上传 api。收到文件后,我会将 pdf 文件转换为 png。我一直在寻找一些有关上传文件的 Hapi.js 文档,但没有成功。收到文件后,我想使用 Node 文件系统读取它,然后将其传递给命令行工具。

这是我的转换路线:

server.route({
   method: 'POST',
   path: '/convert',
   config: {
        payload: {
            output: 'stream',
            parse: true,
            allow: ['application/json', 'image/jpeg', 'multipart/form-data','application/pdf']
            //allow:'application/json'
        },
         handler:function (request, reply) {
            console.log(request.raw.req);
            var data = request.payload;
            if (data.file) {
                 var name = data.file.hapi.filename;
                 console.log(name);
                 var path = __dirname + "/uploads/" + name;

                 console.log(path);
                 var file = fs.createWriteStream(path);

                 file.on('error', function (err) {
                     console.error(err)
                 });

                 data.file.pipe(file);

                 data.file.on('end', function (err) {
                     var ret = {
                        filename: data.file.hapi.filename,
                        headers: data.file.hapi.headers
                     }
                     console.log(JSON.stringify(ret));
                     reply(JSON.stringify(ret));
                 });
                 data,file.on('data',function(err){
                   console.log('data');
               });
            }
         }
   }
});

我有一个简单的表单,其中包含方法 POST 和设置为我的/convert 路由的操作。 有人看到我的错误在哪里吗?在此之前我没有使用过 hapi.js。

这是我帖子的标题:

headers: 
  { host: 'localhost:8000',
    connection: 'keep-alive',
    'content-length': '31',
    'cache-control': 'max-age=0',
    accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    origin: 'http://localhost:8000',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.120 Chrome/37.0.2062.120 Safari/537.36',
    'content-type': 'application/x-www-form-urlencoded',
    referer: 'http://localhost:8000/convert',
    'accept-encoding': 'gzip,deflate',
    'accept-language': 'en-US,en;q=0.8' 
}

最佳答案

正如您在 header 中看到的,Content-Type header 设置为 application/x-www-form-urlencoded:

'content-type': 'application/x-www-form-urlencoded'

但是它不在允许的内容类型列表中:

allow: ['application/json', 'image/jpeg', 'multipart/form-data','application/pdf']

这就是 hapi 响应 415 的原因。不验证请求的类型,而是验证有效负载中文件的类型:

validate: {
    payload: {
        fileUpload: Joi.object({
            headers: Joi.object({
                'content-type': Joi.string().valid(['application/pdf']).required(),
            }).unknown().required()
        }).unknown()
    }
}

关于javascript - 为什么我的nodejs pdf上传代码返回Status 415 "unsupported Media Type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26824850/

相关文章:

javascript - Highcharts 列的日期时间标签

javascript - React Js - Flux 中的状态管理

javascript - 如何编辑node-soap中的响应字段

javascript - 当我输入 npm start 时如何启动 Gulp watch 任务

javascript - 如何直接在Sequelize中更改预加载的结果

ios - 复制CALayer

javascript - 如何用短路编码 if 语句

android - PDF "Download Unsuccessful"仅适用于 Android 手机

java - 我可以通过文档对象将 PDF 上传到 SugarCRM 吗?

c++ - nodejs C++ 共享对象