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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1977閲覧

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

mote

総合スコア128

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/10/09 10:06

編集2018/10/09 10:19

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

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

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

js

1var app = require("http").createServer(handler), 2io = require("socket.io").listen(app), 3fs = require("fs") ; 4const file = require("./file.js"); 5 6app.listen(3000) ; 7console.log("server start!"); 8function handler(req,res){ 9 fs.readFile(__dirname+"/file.html",function(err,data){ 10 if (req.url == '/fileupload') { 11 file(req,res); 12 res.write('File uploaded and moved!'); 13 res.end(); 14 }else{ 15 res.writeHead(200); 16 res.write(data); 17 res.end(); 18 } 19 }); 20} 21io.sockets.on("connection",function(socket){ 22 console.log("connect") ; 23 socket.on("upload",function(data){ 24 console.log(data) ; 25 socket.emit("move",data); 26 }); 27}); 28

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

html

1<!DOCTYPE html> 2<html lang="ja" > 3 <head> 4 <meta charset="utf-8"> 5 <title>file,pass</title> 6 </head> 7 <body> 8 <form action="fileupload" method="post" enctype="multipart/form-data"> 9 <input type="file" name="filetoupload"><br> 10 <input type="submit"> 11 </form> 12 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> 13 </script> 14 <script src="http://localhost:3000/socket.io/socket.io.js"></script> 15 16 17<script> 18function act(){ 19 var socket = io.connect(); 20 $("#uploadfile").submit(function(e){ 21 socket.emit("emit_data",e); 22 e.preventDefault();//submitの実行を止める 23 }); 24 socket.on("data_from_server",function(data){ 25 console.log(data); 26 }); 27}; 28act(); 29</script> 30 </body> 31</html> 32

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

js

1var fs = require("fs"); 2var formidable = require("formidable") ; 3const ls = require("./childprocess"); 4module.exports=function file(req,res){ 5 var form = new formidable.IncomingForm(); 6 form.parse(req, function (err, fields, files) { 7 var oldpath=files.filetoupload.path ; 8 var newpath="./motegiyuuta/Desktop/"+files.filetoupload.name ; 9 fs.rename(oldpath,newpath,function(err){ 10 if(err) res.end(err) ; 11 zip(newpath); 12 console.log("file,move",newpath); 13 }); 14 }); 15 } 16

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

js

1const {spawn} = require('child_process') ; 2const file = require("./file.js") ; 3var fs =require("fs"); 4 5module.exports = function zip(newpath){ 6var ls = spawn("unzip",[newpath]); 7 ls.stdout.on('data', function(data){ 8 console.log(`stdout: ${data}`); 9 }); 10}; 11

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

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

投稿2018/10/09 10:40

mote

総合スコア128

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問