出来るのだASP Q&A掲示板(過去LOG)  訪問数 52046 昨日 889 今日 776
    【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。
Topに戻る 掲示板に戻る 検索 削除 管理者

ファイルアップロードに関して   もさぎさん [2002/07/30 19:49:30] [2379]
  Re:ファイルアップロードに関して   北岳さん [2002/07/31 15:09:53] [2391]

[2379] ファイルアップロードに関して
投稿者:もさぎさん 2002/07/30 19:49:30
メール送信の処理を作成しています。
機能概要は、クライアントで添付ファイルを複数指定し、
「メール送信ボタン」押下で指定された添付ファイルを添付して
メールを送信したいのですが、現在のところ以下の機能は作成済みです。

 @<INPUT type="file" 〜>でファイルを指定する機能を作成
 A「追加」ボタンを作成し、ボタン押下で、@で指定されたパスを
同一ページ上にリストとして表示
 B「削除」ボタンでリストより選択されたパスを削除
  (チェックボックスを設け、ONで対象を感知しています)

以上の機能に「メール送信」ボタン押下時に指定された
クライアントのファイルをサーバの指定フォルダにアップロードし、
メールに添付する機能を付け加えたいのですが、
調べたところ<FORM>タグに「ENCTYPE="multipart/form-data"」を
追加しなければならないそうですね。
そこで、早速そのようにしてみたところ、上記ABの処理が
動かなくなってしまいました。
上記の処理で「追加」「削除」をする度に毎回自分自身に送信して
処理をしているせいかと思うのですが、
「ENCTYPE="multipart/form-data"」を追加する事によって
上記@ABの処理を有効にしつつ、ファイルをアップロードするには
どうしたら良いのでしょうか?

ASPは初心者の為、上手く説明できず済みません。
説明の到らない分、ソースを一部載せますので、
どなたかご教授下さい。
宜しくお願い致します。
------------------------------------
'■「追加」「削除」「メール送信」でモードを設定し、
' 処理を分岐させています
'■指定されたファイルを同一ページ上にリストとして
' 追加/削除する為にセッションに格納ししています

Select Case intMode
'追加処理
Case 1
If intFCnt < 20 Then ⇒ファイル数を判定しています
If strPath <> "" Then
'セッションに格納
Session("strPath" & intFCnt) = strPath
'ファイル数のカウントアップ
intFCnt = intFCnt + 1
End if
Else
Response.write"ファイルは20コまでです。"
End if

'削除処理
Case 2
For intidx = 1 To intFCnt
'チェックボックスの値を取得する
intChk = CStr(Request.Form("chk_" & intidx))
If intChk <> "on" Then ⇒ONの場合は削除
'変数再定義
intNewFCnt = intNewFCnt + 1
Session("strPath" & intNewFCnt - 1) = Session("strPath" & intidx - 1)
End if
Next
intFCnt = intNewFCnt

'メール送信処理
Case 3
'添付ファイルの編集
For intidx = 1 To intFCnt
strFile = Session("strPath" & intidx - 1)  strFileString = strFileString & strFile & vbTab
Next
'メール送信処理へ
Call Send_Mail(strFileString,strComment) ⇒※へ
End Select


---------------------------------------
'メール送信処理(※)
---------------------------------------
svname = "XXXX@XXX.co.jp"
mailto = "<XXXX@XXX.co.jp>"
body = "本文です"
files = strFileString ⇒上で指定した添付ファイルリストです
mailfrom = "XXXX@XXXX.co.jp"
subj = "メール送信テスト(添付あり)"

'メール送信
Set bobj = Server.CreateObject("BASP21")
rc = bobj.SendMail(svname,mailto,mailfrom, subj,body,files)



[2391] Re:ファイルアップロードに関して
投稿者:北岳さん 2002/07/31 15:09:53
私はメールは全く素人ですが、今回はファイルアップロードがらみの問題と思いますので、以下解説をば。
 
<input type="file">でアップロードするファイルを選択する場合、
---------------
@クライアントが参照ボタンを押し、自分のマシンのファイルのリストからファイルを選択します。
A選択されたファイル名が、参照ボタンの左のテキストボックスに書き込まれます。
B<form 〜> </form>内に作ったsubmitボタンを押すと、上のテキストボックス内のファイルがサーバに送られます。
Cformに、
 ENC(このフォームから送られる封筒の中身の)TYPE(タイプは)=
 "multipart(複数の区画に分かれた)/form-data(フォームデータです)"
と書いておくと、
D受け取ったBASP21は、封筒の中から必要な区画をチョビチョビ取り出します。
(このサイトを「チョビチョビ」で検索してみて下さい。)
---------------
複数のファイルを一括して送りたい場合は、
<form action=〜 ENCTYPE="multipart/form-data">
<input type="file" name="nm1" size=50>
<input type="file" name="nm2" size=50>
・・・
<input type="file" name="nm20" size=50>
<input type="submit">
</form>
と書けば可能で、basp21がnm1,nm2・・・と、ちょびちょび取り出せます。
 
が、いずれにせよ、サーバに送れるのは、
<input type="file">で作られたテキストボックス内のファイルだけです。
それを別のリストボックスなどに移しても、そこからはアップロードできません。■
(ご質問の、「ENCTYPE云々を記述したからアップロードできなくなった」、というのは解釈違いで、
記述したからアップロードする環境が整ったものの、別の問題■が出たわけです。)
 
じゃあ、クライアントが一旦選択したファイルを増減したい場合、どうすればいいかと申しますと、自分の知る限り、良い方法がありません。
 
案1:ActiveXコンポーネントをクライアントにインストールしてもらうことが可能なら、
http://www.hi-ho.ne.jp/babaq/bfup.html
 
案2:<input type="file">を並べて書いて、複数ファイルを一括アップの形に持っていく方法を工夫する。
ただし、このテキストボックス内に、VBなどのスクリプトで文字を書き込めないのが泣き所(クライアントが画面上でDrag & Dropで文字を落とし込むことは可能)で、クライアントの手を再度煩わせることになります。
 
他にうまい案があるでしょうか>all



TreeBBS For ASP V.0.1.3
Program By YasNet