質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.58%

child_processを用いて、パスを指定したLinuxコマンドを使って送られてきたzipファイルを解凍したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 868

mote

score 124

クライアントから"socket.io"でzipファイルを送信して、javascriptの"formidable"モジュールを使って、送られてきたファイルの保存場所を"rename"を使って指定しました。
"rename"を使って newpath という名前で保存場所のパスに名前を付けました。
こちらの newpath を使って、"child_process"でのマルチプロセスで、linuxコマンドを叩きたいのですが、どうも上手く行きません。
formidableによるnewpathの指定が上手くいっていない様子です。

実際に実行してみても、zipファイルの解凍が出来ている様子はございません。
しかし、パスを指定せず現在のフォルダでは実行可能です。

err等も出てこないので、お手上げ状態です。
どなたか私を助けてください...
↓サーバーの立ち上げとsocket通信ファイル

var app = require("http").createServer(handler),
io  = require("socket.io").listen(app),
fs  = require("fs") ;
const file = require("./file.js");

app.listen(3000) ;
console.log("server start!");
function handler(req,res){
  fs.readFile(__dirname+"/file.html",function(err,data){
    if (req.url == '/fileupload') {
      file(req,res);
      res.write('File uploaded and moved!');
      res.end();
    }else{
      res.writeHead(200);
      res.write(data);
      res.end();
    }
  });
}
io.sockets.on("connection",function(socket){
  console.log("connect") ;
  socket.on("upload",function(data){
    console.log(data) ;
    socket.emit("move",data);
  });
});


↓htmlでzipファイルを送信する

<!DOCTYPE html>
<html lang="ja" >
  <head>
    <meta charset="utf-8">
    <title>file,pass</title>
  </head>
  <body>
    <form action="fileupload" method="post" enctype="multipart/form-data">
    <input type="file" name="filetoupload"><br>
    <input type="submit">
    </form>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js">
    </script>
    <script src="http://localhost:3000/socket.io/socket.io.js"></script>


<script>
function act(){
  var socket = io.connect();
  $("#uploadfile").submit(function(e){
    socket.emit("emit_data",e);
    e.preventDefault();//submitの実行を止める
  });
  socket.on("data_from_server",function(data){
    console.log(data);
  });
};
act();
</script>
  </body>
</html>


↓"formidable"を使って送られてきたファイルをサーバーで扱えるようにしている。renameでzipファイルの保存場所を指定。
ここの保存場所がいけないのかも?
"./motegiyuuta/Desktop/"->"./"なら正常にファイルの解凍ができますが、指定したフォルダで処理したいです。

var fs = require("fs");
var formidable = require("formidable") ;
const ls = require("./childprocess");
module.exports=function file(req,res){
      var form = new formidable.IncomingForm();
      form.parse(req, function (err, fields, files) {
        var oldpath=files.filetoupload.path ;
        var newpath="./motegiyuuta/Desktop/"+files.filetoupload.name ;
        fs.rename(oldpath,newpath,function(err){
          if(err) res.end(err) ;
          zip(newpath);
          console.log("file,move",newpath);
        });
      });
    }


↓"child_process"を使って newpathに対して Linuxコマンドを使いたい。

const {spawn} = require('child_process') ;
const file = require("./file.js") ;
var fs =require("fs");

module.exports = function zip(newpath){
var ls = spawn("unzip",[newpath]);
 ls.stdout.on('data', function(data){
  console.log(`stdout: ${data}`);
 });
};


何卒よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

パスの記述方法が間違っていただけでした。
"./新しいフォルダ"で成功しました

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る