ITエンジニアの雑談@rascalroom

インフラからフロントまで。若輩エンジニアの勉強まとめ。

アプリ製作 #Sails.js &コントローラー %req.file ~ファイルをサーバーにアップロードする~

 

手元にあるファイルをサーバーに送るときの方法です。 

 

 

雑談

よく忘れてよく調べるので、

まとめます。

 

ファイルのアップロードはちょこまかする機会ありますね。

 

 

req.file

説明

sailsjs.com

 

sailsjs.com

 

率直に、長いし何言っとるかわからんのだよね。

 

僕は、英語は雰囲気読みで、コアな専門用語はちんぷんかんぷんです。

素直に勉強不足。。。

 

 

"使い方" をコピペすればできるようにします。

 

使い方

HTML

<form action="/uploadfile" enctype="multipart/form-data" method="POST" target="_blank">

  <input name="image" type="file">

  <input type="submit" value="アップロード">

</form>

 

(<pre>すると自動で変換されるの、したくないときどうするんでしょう?)

 

enctype="multipart/form-data"

これはおまじない。

ファイルをアップロードするときは付けるらしい。

細かいところは知りません。

 

 

Controller
/**

 * RoomController

 *

 * @description :: Server-side actions for handling incoming requests.

 * @help        :: See https://sailsjs.com/docs/concepts/actions

 */



module.exports = {



  /**

   * `RoomController.uploadfile()`

   */

  uploadfile: async function (req, res) {



    req.file('image').upload(function (err, uploadedFiles) {

      if(err) return res.serverError(err);

      return res.json({ files: uploadedFiles });

    });



  }



};

 

req.file(' { field } ').~

ってとこの "field" と、

type="file" の name を同じにしましょう。

 

 

 

アップロードするときは、

req.file( ~ ).upload( ~ );

 

function 内は、エラー処理とアップロード結果をJSONで出力してます。

 

{

  "files": [

    {

      "fd": "/app/app1/.tmp/uploads/8542d5f2-dc48-4e5d-9cbe-7b1a11abf160.png",

      "size": 154128,

      "type": "image/png",

      "filename": "sailsliftWebapp1.png",

      "status": "finished",

      "field": "image"

    }

  ]

}

 

fd は、サーバー側に保存するときのファイルパス。

size は、サイズ。

type は、ファイルの形式。例は、png。

filename は、送信前のファイル名。

status は、ステータス。

field は、field。

 

保存時のファイルパスは、デフォルトで、

"./tmp/uploads" 下に置かれます。

 

ファイルパスを変えたいときは、

var uploadDir = process.cwd() + '/assets/images';

req.file('image').upload({

  dirname: uploadDir

}, function (err, uploadedFiles) {

  if(err) return res.serverError(err);

  return res.json({ files: uploadedFiles });

});

 こう。

 

dirname オプションで指定しましょう。

書式はよく見るように。

 

process.cwd() は、sails lift をしたところのディレクトリ名を参照してます。

 

assets/images に保存することで、

http://{ ~~~ }/images/{ fd のファイル名 }

 で見ることができるようになります。

 

 

まとめ

ファイルアップロードはこんな感じです。

大丈夫かな?

あんまりちゃんと解説できてないですよね。。。

 

 こうゆうところは定型なので、細かいことは気にしないで行きましょう!