[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]ファイルをドラッグ&ドロップでサーバにアップロードする” の続きを読む

ブログ(WordPress)の投稿一覧を取得して、別のウェブサイトに表示する方法

ブログの更新情報を自分のウェブサイトで表示できるといいですね。
その方法です。

まず、ブログのRSSフィードから投稿一覧を取得する方法です。

#!/usr/bin/perl

use strict;
use warnings;
use XML::FeedPP;
use Time::Local;

my $url = 'http://my.blog.com/feed/';
my $feed = XML::FeedPP->new($url); #フィードを取得
my $line = "
    \n"; my $counter = 0; foreach($feed->get_item()){ #投稿を取得 $counter++; if($counter > 5){ #最新5件表示します。数はお好みで。 last; } my $date = substr($_->pubDate(), 0, 10); $date =~ s/\-/\./g; #日付の書式を 2017-01-17 から 2017.01.07へ。お好みで。 $line .= "
  • " . $date; $line .= " - "; $line .= "<a href = \"" . $_->link() . "\">"; $line .= $_->title() . "
  • \n"; } $line .= "
\n"; open(BLOG, ">", "./www/mywebsite/blogdata.html"); #このスクリプトを置いてあるところから、ウェブサイトを置いてあるとこまでのパス print BLOG $line; close(BLOG);

“ブログ(WordPress)の投稿一覧を取得して、別のウェブサイトに表示する方法” の続きを読む

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

まだまだ名著です。
Effective 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";