おさらい
- クソゲーのキャラクターシート登録所みたいなものを作成する - Qiita
- クソゲーのキャラクターシート登録所みたいなものを作成する2 - Qiita
- クソゲーのキャラクターシート登録所みたいなものを作成する3 - Qiita
もう誰も横浜の果てで涙という名の同窓会だけ見えないRPGのキャラシ保管庫を作成しています。
一旦デプロイ。
デプロイは過去のQiitaを見つつやってました。
ありがとう自分用メモ!
- Laravel5.5(Homestead)をXSERVERにGitでデプロイする努力の過程 - Qiita
- XSERVERにgit pushしようとしたらPermission deniedとか言われた対策 - Qiita
以前に作成したプロジェクトとほぼ同じ仕組みにしました。
こんな感じです。
パス | 目的 |
---|---|
~/PROJ/ | リモートリポジトリ |
~/USER.xsrv.jp/git/PROJ.git/ | ベアリポジトリ |
~/USER.xsrv.jp/public_html/PROJ | リモートリポジトリのpublicへのエイリアス |
ベアリポジトリをローカルのgit remoteの指定先にしつつ、/home/USER/USER.xsrv.jp/git/PROJ.git/hooks/posts-receive
みたいなやつを作成して公開用リモートリポジトリにもpushされるようにしています。
画像をどうにかする。
キャラクターシートを登録したり表示したりというのはできてます。
あとは画像をどうにかするだけ。
微妙に苦手意識があるのですが……頑張ります。
プレビュー
ローカルの画像を取得して一時的にURLを作成し、imgのsrcを書き換えればとりあえずプレビューのようなことはできるみたいです。
リロードで飛ぶらしいですがまあリロードさせない制御は入れているので(別にどうでも)いいかなと思っています。
こんな感じでできました。
// 画像プレビュー
function photoKazaru(file)
{
document.f.photo.src = window.URL.createObjectURL(file);
}
input type="file"のonchangeでphotoKazaruを呼び出してます。
アップロード
なんかいろいろ見たんですが……めんどくせええええ!!1!
ってなりました。
そんなときに知ったのがDataURI。
プレビューのところで参照したサイトで紹介されていて、要するに画像データを文字列で表現するらしいです。
これをDBにぶち込めばいいのでは?と考えて、まあ実装もさくっとできたんですが。
データベースのレコードに何十KBとかってテキストを放り込むのはどうかなとやってから思いました。
LONGTEXTは最大4GBまで行けるらしいから容量的な問題はないでしょうけど……。
そもそもそれなら画像のバイナリ突っ込むのと変わらないですよね。
で、バイナリ取得できるならファイルに書き込む
別の方法を試す
いろいろ調べてたらアップロードする方法も理解できてきたので、地道な感じで実現しました。
Validate? なにそれおいしいの?
バイナリファイルの中身をそっくりサーバーに移し替える作業をアップロードと言っていいのかどうかは若干気になるところです。
// 画像を保存
// 画像が選択されていれば保存する
foreach ($_FILES as $file)
{
// 各種情報の取得
$tmp_name = $file['tmp_name'];
$size = $file['size'];
$ext = pathinfo($file['name'], PATHINFO_EXTENSION);
if (exif_imagetype($tmp_name) && $size < 120000)
{
$f = fopen($tmp_name, 'rb');
$b = fread($f, $size);
$imgpath = '/img/upload/' . $id_rand . '.' . $ext;
$savepath = $_SERVER['DOCUMENT_ROOT'] . $imgpath;
file_put_contents($savepath, $b);
}
}
ファイル名はどうせ一意になるので識別IDとして利用しているid_randにしました。
すでにある場合は上書きします。