Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从CloudFoundry节点应用程序调用java命令_Java_Node.js_Cloud Foundry - Fatal编程技术网

从CloudFoundry节点应用程序调用java命令

从CloudFoundry节点应用程序调用java命令,java,node.js,cloud-foundry,Java,Node.js,Cloud Foundry,在我的应用程序中,我想将PDF文件转换为图像,但node.js中似乎没有模块。所以我想用java应用程序来完成这项工作 我们可以在CloudFoundry节点应用程序中调用java命令吗 谢谢 Hong好的,我已经构建了一个express应用程序来完成这项工作 app.js看起来像这样 /** * Module dependencies. */ var express = require('express') , routes = require('./routes') , uti

在我的应用程序中,我想将PDF文件转换为图像,但node.js中似乎没有模块。所以我想用java应用程序来完成这项工作

我们可以在CloudFoundry节点应用程序中调用java命令吗

谢谢


Hong

好的,我已经构建了一个express应用程序来完成这项工作

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>
这一切都可以在我的CloudFoundry VCAP私有实例上正常工作,但在CloudFoundry.com上不行,我认为这是由于权限问题。我将与工程团队跟进此事,并确定是否可以使用正确的权限调用ImageMagick

=========

使现代化 我已经修复了CloudFoundry.com的问题,它似乎阻止ImageMagick使用/tmp作为临时目录。必须设置env var MAGICK_TMPDIR,您现在可以在app.js文件的顶部看到这一点

我现在也重定向到图像,而不是阅读它,就像一个魅力


==

好的,所以我构建了一个express应用程序来完成这项工作

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>
这一切都可以在我的CloudFoundry VCAP私有实例上正常工作,但在CloudFoundry.com上不行,我认为这是由于权限问题。我将与工程团队跟进此事,并确定是否可以使用正确的权限调用ImageMagick

=========

使现代化 我已经修复了CloudFoundry.com的问题,它似乎阻止ImageMagick使用/tmp作为临时目录。必须设置env var MAGICK_TMPDIR,您现在可以在app.js文件的顶部看到这一点

我现在也重定向到图像,而不是阅读它,就像一个魅力


==/p>我想最好是将独立应用程序作为一项服务。看看Imagemagick应该可以做到这一点。我刚刚在本地尝试了转换,但失败了,出现了一个非常奇怪的错误…@ViktorStolbin如果在cloud foundry上找不到JavasCript库或服务来完成这项工作,那么创建一个java web应用作为转换服务确实是唯一的选择。谢谢。在dotCloud上,这非常简单。。。您只需修改节点自定义服务并在包列表中添加imagemagick。此dotcloud.yml文件应可用于修补dotcloud上的节点。我没有时间去测试,在世界的这一边已经很晚了。我想最好是把独立的应用程序作为一种服务。看看Imagemagick应该可以做到这一点。我刚刚在本地尝试了转换,但失败了,出现了一个非常奇怪的错误…@ViktorStolbin如果在cloud foundry上找不到JavasCript库或服务来完成这项工作,那么创建一个java web应用作为转换服务确实是唯一的选择。谢谢。在dotCloud上,这非常简单。。。您只需修改节点自定义服务并在包列表中添加imagemagick。此dotcloud.yml文件应可用于修补dotcloud上的节点。我没有时间考试,在世界这一边已经很晚了。