私のアプリでは、PDFファイルを画像に変換したいのですが、node.jsにモジュールがないようです。だから私はJavaアプリケーションを使用して作業を行いたいと思います。
Cloud FoundryノードアプリでJavaコマンドを呼び出すことはできますか?
ありがとう。
ホン
私のアプリでは、PDFファイルを画像に変換したいのですが、node.jsにモジュールがないようです。だから私はJavaアプリケーションを使用して作業を行いたいと思います。
Cloud FoundryノードアプリでJavaコマンドを呼び出すことはできますか?
ありがとう。
ホン
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
====