C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ファイルアップロードに関して


(過去ログ 10 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■1970 / inTopicNo.1)  ファイルアップロードに関して
  
□投稿者/ osam (1回)-(2007/03/11(Sun) 17:27:08)

分類:[レガシ ASP] 

みなさん
お世話になります。

超初心者です。

ASPを使って、一つの画面でファイルアップロード、ファイルダウンロード、ファイルの削除機能
を一つのファイルに埋め込む形で作っていきたく、現在製作中です。

wwwrootの中にdbというフォルダを創り、それをサーバー内のフォルダと仮定して、そこに、エクセルやら、ワードやらを入れ
一覧を表示するような形をとっています。

で今↓

<%@Language= VBScript%>

<html>
<title>文章共有・一覧表示</title>

<body>

<hr width="550"></hr>

<!--アップロード処理-->

<% 
Sub Upload() 

a=Request.TotalBytes 
b=Request.BinaryRead(a) 
set obj=server.createobject("basp21") 
f1=obj.FormFileName(b,"file1") 
fsize1=obj.FormFileSize(b,"file1") 
newf1=Mid(f1,InstrRev(f1,"\")+1) 
l1=obj.FormSaveAs(b,"file1",Server.MapPath(curPath)) 

Upload=obj.From(b,"Upload") 
If Request=("Upload") Then 
call Upload 
End If 

EndSub 

%> 

<FORM ACTION="Upload" ENCTYPE="multipart/form-data" METHOD=POST> 
ファイル: <INPUT TYPE=file NAME="file1"> 
<INPUT TYPE=SUBMIT NAME=UPLOAD> 
</FORM> 
<%
curpath="./db"

Set objFso = Server.CreateObject("Scripting.FileSystemObject")
Set fld=fso.GetFolder(Server.MapPath(curPath))

%>

<tr> 
<td> 
<table border="1"> 
<tr> 
<th nowrap="nowrap">ファイル名</th> 
<th nowrap="nowrap">サイズ</th> 
<th nowrap="nowrap">ファイルタイプ</th> 
<th nowrap="nowrap">最終更新日</th> 
<th nowrap="nowrap">ダウンロード</th> 
<th nowrap="nowrap">処理</th> 
</tr> 

<% 
For Each sFld In fld.SubFolders 
%> 

<tr> 
  <td nowrap="nowrap"><p><%=sFld.Name %></p></td> 
  <td nowrap="nowrap"></ br></td> 
  <td nowrap="nowrap">ファイル フォルダ</td> 
  <td nowrap="nowrap"><%=sfld.DateLastModified %></td> 
</tr> 

<% 

Next 
For Each fl In fld.Files 

%> 

<tr> 
<td nowrap="nowrap"><p><%=fl.Name%></p></td> 
<td nowrap><%=Int(fl.Size/1024) & "KB" %></td> 
<td nowrap><%=fl.Type %></td> 
<td nowrap><%=fl.DateLastModified %></td> 

<!--ダウンロードのボタン↓--> 
<td><input type="button" name="Download" value="Download" onClick="Download_Click('<%=fl.Name%>')"></td> 

<!--削除のボタン↓--> 
<td><form method="post" action="kyouyuorg1.asp"> 
<input type="hidden" name="delete" value="yes"> 
<input type="button" value="削除"> 
</form></td> 
</tr> 

<% 
Next 
End Sub
%> 

</table> 
</body> 
</html> 

ここまで作ったのですが、一覧すら表示しなくなってしまい、
お手上げ状態です。

どなたかご指導いただける幸いです。
何卒よろしくお願い申し上げます。



引用返信 編集キー/
■1972 / inTopicNo.2)  Re[1]: ファイルアップロードに関して
□投稿者/ 魔界の仮面弁士 (255回)-(2007/03/11(Sun) 19:51:21)
No1970 (osam さん) に返信
とりあえず、HTML の文法違反がいろいろと気にかかりますが、
コード部分で目についた所を、順次指摘してみると:


==== 問題点(0) ==== [Server Side]
暗黙変数に頼ったスクリプトは、スペルミスなどの問題点を分りにくくします。
「Option Explicit」「Dim」を適切に利用するようにしましょう。


==== 問題点(1) ==== [Server Side]
>   Sub Upload() 

この「Upload プロシージャ」を呼び出している部分が、このコード中には一切ありませんよね。

ですから、最後の End Sub 部分までがゴッソリ処理されずに、
> 一覧すら表示しなくなってしまい、
という状況になっているわけです。これが今回の最大の問題でしょう。


==== 問題点(2) ==== [Server Side]
> If Request=("Upload") Then 

これは実質上、
 If CStr(Request) = "Upload" Then
のような意味で解釈されてしまうため、このコードではエラーになるはずです。
この部分では、どのような判定を行わせたいのでしょうか?


==== 問題点(3) ==== [Server Side]
> l1=obj.FormSaveAs(b,"file1",Server.MapPath(curPath))

ここで指定している curPath 変数は、この時点では空っぽ(Empty)なので、
MapPath メソッドが実行時エラーとなってしまうでしょう。


==== 問題点(4) ==== [Server Side]
> EndSub

「EndSub」というステートメントはありません。スペルミスでしょうか?
「End Sub」ならば使えますけど、それは最後の方に記述済みですよね。

確認なのですが、先の「Sub Upload()」に対応するプロシージャの終端は、
この「EndSub」の行を想定しているのでしょうか? それとも、
コードの最後の方に記述した「End Sub」の行なのでしょうか?


==== 問題点(5) ==== [Client Side / HTML]
> <FORM ACTION="Upload" ENCTYPE="multipart/form-data" METHOD=POST> 

この場合はおそらく、action="Upload.asp" にする必要があるのでは。
削除ボタンの方は、action="kyouyuorg1.asp" と指定されていますので。

# IIS の設定等によっては、action="Upload" でも呼べますけれども…。


==== 問題点(6) ==== [Client Side / Script]
> <input type="button" name="Download" value="Download" onClick="Download_Click('<%=fl.Name%>')">

ここで指定されている「Download_Click」というスクリプトが定義されていないようです。
script タグを追加して、対応する JScript または JavaScript のコードを指定しましょう。


==== 問題点(7) ==== [Server Side]
> <td nowrap><%=Int(fl.Size/1024) & "KB" %></td> 

問題点というほどでも無いですが、「Int(fl.Size/1024)」という処理は、
「fl.Size \ 1024」 にするとよいかと思います。

それと、1 MB を超えるファイルのことも考慮に入れて、
FormatNumber( fl.Size \ 1024, 0, False, False, True)
のように、3桁ごとの区切り記号を表示するとなお良いかも。


==== 問題点(8) ==== [Client Side / Script]
> <!--削除のボタン↓--> 
> <td><form method="post" action="kyouyuorg1.asp"> 
> <input type="hidden" name="delete" value="yes"> 
> <input type="button" value="削除"> 
> </form></td> 

これだと、複数のファイルがあったときに、どのファイルを削除したいのかが
kyouyuorg1.asp 側で判断できませんよね。
ファイル名(またはそれに相当する情報)も、hidden で送信しましょう。

引用返信 編集キー/
■1974 / inTopicNo.3)  Re[2]: ファイルアップロードに関して
□投稿者/ osam (3回)-(2007/03/11(Sun) 21:21:00)
魔界の仮面弁士様

ご指摘大変ありがとうございました。

とりあえずやってみたいと思います。

また報告いたしますので、教えていただけると幸いです。

何卒よろしくお願い申し上げます。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -