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

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

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

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

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Q&A

解決済

1回答

1587閲覧

Node.jsのwriteFileで出力したjpeg画像がサポートされていない形式になってしまっていて見ることができない。

MIRA1122

総合スコア4

Node.js

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

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0グッド

1クリップ

投稿2020/04/22 03:16

前提・実現したいこと

Node.jsで画像をサーバーアップロードして表示するというちょっとしたWebアプリケーションを作ろうとしています。
まずは画像をアップロードするところを作ろうと思い下記のサイトを参考にして作成しました。
しかし、アップロードされた画像が表示できない形式になってしまっているため、どうしたら表示できる形式で出力できるのか教えていただきたいです。

Node.jsで画像アップロードを受けつけるサーバー

発生している問題

Fiddlerを用いてJEPG画像をPOSTしたところ、サーバー側で受信し、JPEG形式のファイルを出力させることができました。
しかし、いざJPEG画像を開くと「サポートされていない」とでてしまい、ファイル自体は0KBでもないのですが、開くことができません。

サポートされていない形式となる

Textに出力させたところ沢山の文字列が入ってたため何かしら出力されているものと思いますが、なぜ表示できないのかわかりません。

イメージ説明

該当のソースコード

Node.js

1'use strict'; 2 3const fs = require('fs'); 4const express = require('express'); 5const app = express(); 6const PORT = process.env.PORT || 3000; 7 8app.get('/', (req, res) => res.send('POSTでアップロードしてください。')); 9 10app.post('/', (req, res) => { 11 let buffers = []; 12 let cnt = 0; 13 14 req.on('data', (chunk) => { 15 buffers.push(chunk); 16 console.log(++cnt); 17 }); 18 19 req.on('end', () => { 20 console.log(`[done] Image upload`); 21 req.rawBody = Buffer.concat(buffers); 22 //書き込み 23 fs.writeFile('./img.jpg', req.rawBody, 'utf-8',(err) => { 24 if(err) return; 25 console.log(`[done] Image save`); 26 }); 27 }); 28}); 29 30app.listen(PORT);

試したこと

様々なJEPG画像で試しましたが、出力されるファイルのKBが変わるため送信はできていると思います。

補足情報(FW/ツールのバージョンなど)

環境は
Windows 10
Node.js v6.11.5
Powershell
を使用しています。

他にも画像をアップロードする方法をご存知でしたらご教授願いたいです。
また、そもそも画像をアップロード自体、Node.jsではしない等あれば、Webアプリケーションでは通常どのような手法が用いられるのかも教えていただきたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

multipart/form-data の BODYを解釈するモジュールミドルウェア を使ってください。

express v4 以降は、2つのモジュールを使い分けます。

  • body-parser .. 通常のフォーム(application/x-www-form-urlencoded) や、JSONなど単一のデータをそのままPOSTするケースに対応したモジュール
  • multer .. ファイル送信フォーム(multipart/form-data)に対応したモジュール

express + Multer を使用してファイルアップロード API を作成する

それ以前の express では formidable モジュールを用いてミドルウェアを書くこともありました。
express v3の例:Node.js + express + formidable でファイルアップロードを受け付ける

投稿2020/04/22 04:49

編集2020/04/22 04:52
AkitoshiManabe

総合スコア5432

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

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

MIRA1122

2020/04/22 05:00

ご回答いただきありがとうございます!! 試してみたいと思います。 自信で記事を探していたときにbody-parserやmulterというモジュールを使うというのを見ましたが、Express4以降で変更があったものなのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問