プロが教える店舗&オフィスのセキュリティ対策術

お疲れ様です。いつもお世話になっております。

on~~イベントで値をコピーするやり方でいけるのかもと思いつつ、
うまくイメージがまとまらないので質問させてください。

<input type="file">で、ファイルが選択されたら、その値(ファイルのパス)を同じフォーム内のhiddenにも持ちたいのです。

もっと具体的にいうと
hiddenに持った時、ファイル名の拡張子にかかわらず、拡張子を落として、[ファイル名]_thumnail.jpgとつけて、submitしたいのです。

<form action="xxx.php" method="post" enctype="multipart/form-data" name="myForm">
<input type="file" name="upfile" />
<input type="hidden" name="thumnail" />
</form>

document.myForm.upfile.value=document.myForm.thumnail.value;

みたいな感じでできるのでしょうか。
よろしくお願いします。

A 回答 (5件)

以下のコードを参考にしてみてください。


------------------------------------------------------------
onchange='setHidden(this.form)'

------------------------------------------------------------
<script type="text/javascript">
<!--
function setHidden(f) {
var uf = f.upfile.value;
document.myForm.thumnail.value = uf.substring(0,uf.lastIndexOf(".")) + "_thumnail.jpg";
alert(document.myForm.thumnail.value);
}
// -->
</script>
------------------------------------------------------------
    • good
    • 0
この回答へのお礼

具体的なコードありがとうございます。

結局、質問の事項は(こちらの意図するようには)使えないということがわかったので、今回はせっかくのコードも利用できませんが、
勉強になります。

いつか必ず使うときがくるから、そのとき参考にさせていただきます。

お礼日時:2008/07/01 09:20

> document.myForm.upfile.value=document.myForm.thumnail.value;


fileフィールドはreadOnlyですので、これはできません。

もし書き換えができてしまうと、

document.myForm.upfile.value='C\\個人情報が書かれてそうなファイル名';
document.myForm.submit();

ページを表示するだけで、何かのファイルがアップロードされる可能性があります。
<iframe>を隠しておいてtarget指定すると、送信されたことも気づけないかも知れません。


ファイル名を調べるだけなら
document.myForm.thumnail.value=document.myForm.upfile.value;
文字列として受け取れます。
fileフィールドの値は、ブラウザによってフルパスになったり、ファイル名だけになったりの違いがあります。
ブラウザ設定の「ファイルアップロードにはフルパスを含める」の設定にも依存するかも知れません。

やるのならhiddenフィールドの値がthumbnailで、fileフィールドはもとの画像のファイル名ってことにした方が良いと思います。
    • good
    • 0
この回答へのお礼

ふむ。

>やるのならhiddenフィールドの値がthumbnailで、fileフィールドはもとの画像のファイル名ってことにした方が良いと思います。

もとよりそのつもりでした。
すみません。書き方が悪かったみたいです。

レスありがとうございます。

お礼日時:2008/07/01 09:19

因みにどんな頑張ってファイル名を加工しても


その方法だと画像そのものがアップロードできなくなるよ。
ファイル名加工後の名前を「付加」するしかないし、画面移行するとアップロードデータを持ち越せない筈。

結局サーバサイドでどうにかするかファイル名の候補だけ付加するって妥協案になるとおもうよ
    • good
    • 0
この回答へのお礼

確かに・・・。
すごい見落としでした。

指摘ありがとうございます。

お礼日時:2008/07/01 09:18

formのonsubmitで実行させればよいかと思う。


<form ~ onsubmit="hoge(this)">

function hoge(F){
var pos=F.upfile.value.lastIndexOf('\\');
F.thumnail.value = F.upfile.value.substring(pos+1) + '_thumnail.jpg';
}
※ パスの部分は削除しているが拡張子は残してある。元ファイルの拡張子は在っても邪魔にならないと思う。



ただ、全角や妙な記号混じりのファイル名とか来たら困るので
この手の処理はサーバ側でやるのが常。
(使えるなら元のファイル名を使う、使えないファイル名が来たら適当に連番を振ってやる。とか)
    • good
    • 0
この回答へのお礼

ふむふむ

具体的なコードありがとうございます。
ブラウザの仕様などによっても違うのですね。

サーバサイドしかやったことがないので、その辺わかりませんでした。

お礼日時:2008/07/01 09:21

受け取ったPHP側で $thumnail に入れちゃだめなんですか?

この回答への補足

結局ローカル⇔サーバ間のやりとりなので、

move_upload_filesを使おうとおもっているのですよ。
それだと変数に入れたからどうだという問題じゃないんです。

すばやいレスありです。

補足日時:2008/06/30 17:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています