1

私のアプリでは、PDFファイルを画像に変換したいのですが、node.jsにモジュールがないようです。だから私はJavaアプリケーションを使用して作業を行いたいと思います。

Cloud FoundryノードアプリでJavaコマンドを呼び出すことはできますか?

ありがとう。

ホン

4

1 に答える 1

4

OK、それで私はその仕事をするエクスプレスアプリを作りました。

app.jsは次のようになります。

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , util = require('util')
  , fs = require('fs')
  , exec = require('child_process').execFile
  , http = require('http');

process.env.MAGICK_TMPDIR = __dirname + '/tmp'

var app = express();

app.configure(function(){
  app.set('port', process.env.VCAP_APP_PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'ejs');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser({uploadDir:__dirname + "/uploads"}));
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', routes.index);

app.post('/convert', function(req, res) {

  var pdf_file = req.files.pdf.path;
  var uploadsPath = __dirname + "/uploads"

  var filename = pdf_file.split("/")[pdf_file.split('/').length - 1]
  var out =  __dirname + '/public/images/' + filename + '.png';

  exec('convert', [pdf_file, '-append', out], function(err, stdout, stderr) {  

    res.redirect('/images/' + filename + '.png');

  });

});

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

インデックスビューは次のようになります(単純なマルチパートフォーム)。

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <form action="/convert" method="post" enctype="multipart/form-data">
      <label>PDF File</label>
      <input type="file" name="pdf" />
      <input type="submit" />
    </form>
  </body>
</html>

これはすべて、Cloud Foundry(VCAP)のプライベートインスタンスでは正常に機能しますが、CloudFoundry.comでは機能しません。これは、アクセス許可の問題が原因だと思います。私はエンジニアリングチームとこれを追跡し、正しい権限でImageMagickを呼び出すことが可能かどうかを調べます。

=========

アップデート

CloudFoundry.comの問題を修正しました。これにより、ImageMagickが/tmpを一時ディレクトリとして使用できなくなるようです。envvarMAGICK_TMPDIRを設定する必要があります。これは、app.jsファイルの上部に表示されます。

また、画像を読み込むのではなく、画像にリダイレクトしているので、魅力のように機能します。-http ://pdf2png.cloudfoundry.com

====

于 2012-08-17T11:15:00.977 に答える