【问题标题】:Hapi.js file upload how do I grab the file so I could use imageMagick command line tool on itHapi.js 文件上传我如何抓取文件,以便可以在其上使用 imageMagick 命令行工具
【发布时间】:2014-11-09 23:58:55
【问题描述】:

我更改了代码以输出文件而不是流。它为我提供了 tmp 路径,当我使用 fs.readFile 转换为字符串时的数据是

fileUpload=Resume_BrianInoa.pdf

我正在向 hapijs 服务器发布一个文件,这是我处理该帖子的路线:

  server.route({
   method: 'POST',
   path: '/convert',
   config: {
        payload: {
           output:'file',
           maxBytes:209715200,
            parse: false,
            allow: 'application/x-www-form-urlencoded'
        },
        handler:function (request, reply) {

           console.log('path : ' + request.payload.path);
         //   request.payload["fileUpload"].pipe(fs.createWriteStream("test"));
             fs.readFile(request.payload.path, function (err, data) {
                if(err)
                   console.error(err);
                else
                   console.log(data.toString());
               // I want to rewrite the file to a new folder here 
               // Then convert it using imageMagick's command line tool
               //  var newPath = __dirname + "/uploads/" + "newFile.txt" ;
               //  fs.writeFile(newPath, data, function (err) {
               //    console.log(err);
               //    reply('done');
               //  });

             });
          }
   },

这是我的 request.payload

path : /tmp/1415580285921-24240-2cc7987f4fd124ac

我实际上检查了我的 /tmp/ 文件夹并打开了它唯一的文件

/tmp/1415580285921-24240-2cc7987f4fd124ac

已经是 fileUpload=Resume_BrianInoa.pdf 文件未正确上传

我的表单的html代码

<form action="./convert" method="post">
<input type="file" name="fileUpload" id="fileUpload" enctype="multipart/form-data" class="form-control">
<button class="btn">Submit</button>
</form>

【问题讨论】:

  • 你是如何上传文件的?似乎它没有被上传,你只是将文件名发送到服务器。此外,如果您像以前一样禁用解析,则必须自己解析请求,然后才能访问文件数据。使用request.payload.fileUpload.path 上传文件后,您可能会更好地保留解析并访问文件
  • 我正在使用一个简单的表单
    上传指定 enctype 的文件 convert 有一个 post 路由,正在处理上面的文件代码。
  • 将 enctype 移动到表单标签
    并且不要禁用解析,只需使用 @987654326 @
  • 我按照你说的做了,现在我得到了一个 statusCode 415 不受支持的媒体类型。和payload的accept属性有关系吗?
  • 忽略我的最后一条评论,accept 参数应该影响请求 mime 类型,而不是发送文件的实际 mime,因此您可以尝试将 accept 设置为 'multipart/form-data',如果您只想允许它,但我认为将其保留为默认值应该是安全的

标签: javascript node.js pdf asyncfileupload hapijs


【解决方案1】:

总结一下,你的 html 应该是这样的 -

<form action="./convert" method="POST" enctype="multipart/form-data">
    <input type="file" name="fileUpload" id="fileUpload" class="form-control"> 
    <button class="btn">Submit</button>
</form>

还有你的hapi路线

   server.route({
       method: 'POST',
       path: '/convert',
       config: {
            payload: {
               output: 'file',
               maxBytes: 209715200,
               //allow: 'multipart/form-data',
               parse: true //or just remove this line since true is the default
            },
            handler:function (request, reply) {   
               console.log('fileUpload path : ' + request.payload.fileUpload.path);
            }
       },
   });

【讨论】:

  • 很好,现在 request.payload.fileUpload.path 有数据了。你知道我将这个 pdf 文件转换为 png 的下一步是什么吗?我知道如何将文件移动到我想要的目录。但不知道如何调用命令行,直到我从我的节点应用程序安装。
猜你喜欢
  • 2011-05-15
  • 2021-11-27
  • 2017-07-07
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多