ファイルをアップロードしたいCGIが欲しく
サンプルをみつけたのですが、このCGIだと
ファイルをアップロードしたときに、ファイル名がアップロードした時刻になってしまいます。
ファイル名を変更することなく、アップロードするにはどう変更すればよいのでしょうか?
お願いします。ちなみにアップロードしたいファイルの種類はエクセル形式のファイルです。
プログラムは以下のようになってます。
#!/usr/bin/env perl
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use POSIX qw(strftime);
my $q = new CGI;
print $q->header(), $q->start_html();
#print $q->dump; # for debug
my $outputdir = "log"; # ファイルを置く先 (ディレクトリ)
my $fh = $q->param('uploaded_file');
my ($ex) = ($fh =~ m|(\.[^./\\]+)$|); # 拡張子
if ($fh ne "") {
my $timestamp = strftime "%y%m%d%H%M%S", localtime;
my $outputfn = "$outputdir/$timestamp$ex";
open(F, "> $outputfn") or die;
flock(F, 2);
if (defined $fh) {
while (<$fh>) {
print F $_;
}
}
close F;
print qq{saved as <a href="$outputfn">$outputfn</a>};
}
print $q->start_multipart_form(-name => 'myform'),
$q->filefield(-name => 'uploaded_file'),
$q->submit("OK"),
$q->endform,
$q->end_html(), "\n";
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
下記の様に、myを前に付ける事。
my $uploadname = $fh;
my @pathary = split(/\\/, $uploadname);
my $lastpos = @pathary;
それと、こっちの方が正解かもな。
やってみんと分からんが。
my @pathary = split(/\//, $uploadname);
できました。ありがとうございます。
しかし日本語のファイル名をアップロードすると
ファイル名が文字化けそしてファイル自体が壊れてしまいます
もうこれはしかたないことなんでしょうか
No.1
- 回答日時:
(旧)
my $outputfn = "$outputdir/$timestamp$ex";
(新)
$uploadname = $fh;
chomp($uploadname);
@pathary = split(/\\/, $uploadname);
$lastpos = @pathary;
$uploadname = $pathary[$lastpos-1];
my $outputfn = "$outputdir/$uploadname";
コピペばかりしてると池沼になるぞ。www
ありがとうございます。
上記のように書き換えると
Software error
とでて
Global symbol "$uploadname" requires explicit package name at C:\・・・・
のようなエラーが変更した箇所にでます
何が原因でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Perl perlの構文でカンマの意味が分からない 2 2022/10/30 01:53
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- Perl perlのflock関数でロックをかけたままopen関数で何度もファイルを開きなおすことはできますか 3 2023/05/01 22:25
- PHP $filePath = './user_img/' . $file['name'];? 1 2022/12/10 07:29
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オープンしたファイルで行の連結
-
Perlで他サイトの情報を取得し...
-
perlで大容量CSVのsort方法につ...
-
where can I buy snowbord in t...
-
フォルダが開かなくなりました。
-
perlのflock関数でロックをかけ...
-
close()で例外が投げられる理由
-
awkスクリプトでダブルクォーテ...
-
ListBoxのデータを高速でファイ...
-
ExcelをCSV書き出す場合のシー...
-
C言語で特定の行を抽出する方法...
-
window.open でのファイル指定方法
-
パスから最後のディレクトリだ...
-
fgets で値が取得できない
-
ReadLineでの読み出し行を指定する
-
CSVデータの編集の際の重複チェ...
-
ファイル出力の改行コードをLFに
-
ifstream を利用した1行分のテ...
-
vba dir の相対パス
-
配列の中に重複文字列があるか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
close()で例外が投げられる理由
-
perlのflock関数でロックをかけ...
-
改行コードが勝手に
-
open中のファイルをrename
-
ファイルから読み込んだ文字を
-
perlでファイル内の文字列を置...
-
AutoCADのスクリプト
-
Perl で syntax error
-
perlを用いた特定文字列間の抽...
-
テキストファイルの本文中に行...
-
Perlで他サイトの情報を取得し...
-
オープンしたファイルで行の連結
-
PICでFatFsでオープンした内容...
-
パスワードを外部ファイルから...
-
Perl:ファイルハンドルをスカラ...
-
巨大ファイルの行をを逆順に並...
-
ハッシュにファイルハンドル
-
Perlのファイルオープン時...
-
パイプをopenして/usr/bin/grep...
-
telnet接続
おすすめ情報