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

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

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

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

Q&A

解決済

1回答

11374閲覧

Node.js のmulterで画像をアップロードすると、拡張子や名前がめちゃくちゃになってしまう件について

dialbird

総合スコア379

Node.js

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

0グッド

0クリップ

投稿2016/02/08 09:03

こんばんは。

タイトル通り、node.jsのモジュールでmulterを使い、画像を特定のディレクトリに保存しようとしているものです。
特定のディレクトリに保存するところまではうまくいったのですが、名前や拡張子が保存されず、メチャクチャな文字列のデータができてしまいます。
拡張子や名前を保持したまま、保存することはできないのでしょうか?以下のが現在のapp.jsのコードです。

javascript

1var express = require('express'), 2 app = express(), 3 server = require('http').Server(app), 4 multer = require('multer'); 5 6 7app.use(multer({ 8 dest : './uploads/' 9}).single('image')); 10 11 12app.use('/public',express.static(__dirname+'/public')); 13 14app.get('/',function(req,res){ 15 res.sendfile(__dirname+'/public/index.html'); 16}) 17 18server.listen(3000); 19console.log('now comming...');

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

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

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

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

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

guest

回答1

0

ベストアンサー

renamechangeDest を指定してあげる必要がありみたいですね。

Node.js Express4-Multerでファイルアップロード

投稿2016/02/08 09:20

編集2016/02/08 09:21
nobuhito

総合スコア146

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

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

dialbird

2016/02/08 09:39

ご返答ありがとうございます! まさにそのサイトを見ているのですが、書いてある通りに書いても実行されないのです‥‥。 また、拡張子はrenameとは別、とも書かれているのでどうしたらよいものかと悩んでいるところです。
nobuhito

2016/02/08 10:01 編集

うまく実行できなかったコードがあればアドバイスしやすいのですが... 一般的?には先ほどのURLの下記のコードのように `dest` に指定したパスに一旦 `name` で保存され、その後に `fieldname` や `originalname` や `extension` を元にして実際の保存先に移動させることになると思います。 実際の `req.files` の中身を見ると色々わかると思います。 ```js exports.post = function(req, res) { //この時点でアップロードされたファイルは`dest`で指定したパスに保存されている。 console.log(req.files); } // 結果 { thumbnail: { fieldname: 'thumbnail', originalname: 'hoge.txt', name: '1f56fee4b8b562a7ab7b1efb1959bdfb.txt', encoding: '7bit', mimetype: 'text/plain', path: 'uploads\\1f56fee4b8b562a7ab7b1efb1959bdfb.txt', extension: 'txt', size: 81115, truncated: false, buffer: null } } ``` 移動させる理由としては、 `dest` にたくさんファイルが溜まるとハンドリングしにくいとか、ファイル名でディレクトリを分けたいとかそんな理由になると思います。
dialbird

2016/02/09 00:03

おはようございます。 そして返信ありがとうございます! 以下のサイトをみたところ、どうやら私の場合multer.singleでやっていたので、「req.filesではなく、req.fileに情報がたまる」、ということがわかりました。 ちなみにreq.filesはmulter.arrayで複数のデータを処理する場合だそうです。 そしてもう一つの問題、renameが機能しないという問題についてですが、同様に以下のサイトを見ると、どうやらmulterのoptionにはもうrenameがないみたいです........(まだ使えるのですかね?わかりませんが) 代わりに、その下にあったmulter.storageのオプションを使ってみたところ、おっしゃる通りoriginalnameで特定のディレクトリに保存することができるようになりました! 最近変わった仕様なのかはわかりませんが、もし「まだmulterオプションは使えるよ」という話がありましたら是非とも教えて下さい! https://github.com/expressjs/multer
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問