[Perl][Javascript]ファイルをドラッグ&ドロップでサーバにアップロードする

ファイルをドラッグ&ドロップしてサーバにアップロードする方法がやっとわかりました。
肝は以下のところです。

function uploadFile(file){
var formData = new FormData();
formData.append('file', file);
$.ajax({
  async: true,
  type: 'POST',
  contentType: false,
  processData: false,
  url: 'dndtest.cgi',
    data: formData,
    dataType :'html'
}).done(function(){});

ファイルをドラッグ&ドロップしてファイル名などを取得する方法は結構ネットにあがっていますけど、実際にそのファイルをサーバにアップロードする方法を解説するサイトがなく、苦労しました。

  1. FormDataを使う。
  2. ajaxでPOSTする。

ファイルをアップロードする箇所は以下の通りです。

my $q = new CGI;
my @fps = $q->upload('file');
my @fnames = $q->param('file');
my $idx = 0;
foreach my $fname(@fnames){
    $fname = basename($fname);
    copy($fps[$idx], "./test/$fname");
    $idx++;
}

$q->upload()を使うということになかなか気づきませんでした。

以下がソースです。複数ファイルのドラッグ&ドロップにも対応しています。
“[Perl][Javascript]ファイルをドラッグ&ドロップでサーバにアップロードする” の続きを読む

[Perl] ディレクトリを再帰的にたどってファイルをコピーする

#!/usr/bin/perl
use strict;
use File::Copy;

my $srcFile = $ARGV[0]; # コピーするファイル名を取得
print "src file : $srcFile\n";

# 再帰コピー関数
sub recurseCopy{
	my($src, $dir) = @_;
	my @files = ();
	
	print "entering $dir\n";
	
	# カレントディレクトリのディレクトリ・ファイルを取得
	opendir(DIR, $dir) or die("Can not open directory : $dir\n");
	@files = readdir(DIR);
	closedir(DIR);
	
	foreach my $file(sort @files){
		next if($file =~ /^\.{1,2}$/);
		if(-d "$dir/$file"){
			# ディレクトリの場合、再帰コピー呼び出し
			recurseCopy($srcFile, "$dir/$file");
		}
	}
	print "copying $src to $dir\n";
	# 自分自身にはコピーしない
	if($dir ne "\."){
		copy($srcFile, $dir);
	}
}
print "start\n";
my $b = recurseCopy($srcFile, ".");
print "end\n";

Apacheウェブサーバで画像ファイル等をブラウザにキャッシュさせる

ブラウザのキャッシュを活用する

Google アナリティクスのレポート→行動→サイトの速度→速度の提案で、

ブラウザのキャッシュを活用する
静的リソースの HTTP ヘッダー内で、有効期日や最大経過時間を設定すると、ブラウザがネットワークからではなくローカル ディスクから以前にダウンロードしたリソースを読み込むようになります。
次のキャッシュ可能なリソースでブラウザのキャッシュを活用してください:

で、どうすればキャッシュさせるか調べてみました。

“Apacheウェブサーバで画像ファイル等をブラウザにキャッシュさせる” の続きを読む

SHA-1/SHA-256/SHA-512暗号化ツール作成

改修を頼まれた仕事で、ユーザIDとパスワードがソースに直書きだったので、暗号化して持つことに。
ところが暗号化できるサイトがなかなか見つからなかったので、自分で作りました。

はじめは Digest.pm を use すればいいんだろ、と思ってましたが、GMOクラウドには Digest.pm が入ってなかった。
ていうか、CPAN 自体も入ってなかった。
コーディングよりも環境整備に時間を取られました。

2017.2.7追記

これと今後の改修のためにローカル環境にXAMPPとActivePerlをインストールしました。
CPANからDigest::SHAを使えるようにするのに時間と手間を取られました。

.NETでメール本文から各要素を正規表現で抜くのにハマってしまった

.NETでプログラム作っています。
メールを受信して、FromやSubjectなどを正規表現でマッチさせます。 末尾を指定するのがPerlやPHPと違っていて少々ハマってしまいました。 ググったところによると、末尾には改行コードが入って、「\r?$」になるとのことでした。 つまり、件名を取り出すには

^Subject: (.*)$

じゃなくて

^Subject: (.*)\r?$

同様に、

^From: (.*)\r?$
^To: (.*)\r?$
^Date: (.*)\r?$

メール本文は、これが難しい。 「空行に続いて、ピリオド一つだけの行まで」だから、「^$^(.+)^\.$」かと思ったら、

\r?\n\r?\n(.+)\r?\n\.\r?\n"

だった。 変態的ですね。