<FORM METHOD="POST" ENCTYPE="マルチパート/フォームデータ" ACTION="/jspSmartUpload/upload.jsp"> <INPUT TYPE="ファイル" NAME="MYFILE"> <入力タイプ = "送信"> </FORM> |
<!-- ファイル名:upload.html 著者: Zongheng Software Production Center ([email protected]) の Yu Yiqi --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <頭> <title>ファイルのアップロード</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <本文> <p> </p> <p align="center">アップロード ファイルの選択</p> <FORM METHOD="POST" ACTION="jsp/do_upload.jsp" ENCTYPE="マルチパート/フォームデータ"> <input type="hidden" name="TEST" value="good"> <table width="75%" border="1" align="center"> <tr> <td><div align="center">1. <input type="FILE" name="FILE1" size="30"> </div></td> </tr> <tr> <td><div align="center">2. <input type="FILE" name="FILE2" size="30"> </div></td> </tr> <tr> <td><div align="center">3. <input type="FILE" name="FILE3" size="30"> </div></td> </tr> <tr> <td><div align="center">4. <input type="FILE" name="FILE4" size="30"> </div></td> </tr> <tr> <td><div align="center"> <input type="submit" name="Submit" value="アップロードしてください!"> </div></td> </tr> </テーブル> </FORM> </body> </html> |
<%-- ファイル名: do_upload.jsp 著者: Zongheng Software Production Center ([email protected]) の Yu Yiqi --%> <%@ page contentType="text/html; charset=gb2312" language="java" import="java.util.*,com.jspsmart.upload.*" errorPage="" %> <html> <頭> <title>ファイルのアップロード処理ページ</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <本文> <% // 新しい SmartUpload オブジェクトを作成します SmartUpload su = new SmartUpload(); //アップロードの初期化 su.initialize(pageContext); // アップロード制限を設定する // 1. アップロードされる各ファイルの最大長を制限します。 // su.setMaxFileSize(10000); // 2. アップロードされるデータの合計の長さを制限します。 // su.setTotalMaxFileSize(20000); // 3. アップロードを許可するファイルを設定します (拡張子によって制限)。doc ファイルと txt ファイルのみが許可されます。 // su.setAllowedFilesList("doc,txt"); // 4. アップロード禁止ファイルの設定(拡張子による制限)、exe、bat、ファイルのアップロードを禁止 jsp、htm、htmlの拡張子を持つファイルと拡張子のないファイル。 // su.setDeniedFilesList("exe,bat,jsp,htm,html,,"); //ファイルをアップロードする su.upload(); // アップロードされたすべてのファイルを指定されたディレクトリに保存します int count = su.save("/upload"); out.println(count+"ファイルは正常にアップロードされました!<br>"); //Request オブジェクトを使用してパラメータの値を取得します out.println("TEST="+su.getRequest().getParameter("TEST") +"<BR><BR>"); // アップロードされたファイル情報を 1 つずつ抽出し、同時にファイルを保存します。 for (int i=0;i<su.getFiles().getCount();i++) { com.jspsmart.upload.File ファイル = su.getFiles().getFile(i); // ファイルが存在しない場合は続行 if (file.isMissing()) 続行; // 現在のファイル情報を表示 out.println("<TABLE BORDER=1>"); out.println("<TR><TD>フォーム名(フィールド名)</TD><TD>" + file.getFieldName() + "</TD></TR>"); out.println("<TR><TD>ファイル長(サイズ)</TD><TD>" + file.getSize() + "</TD></TR>"); out.println("<TR><TD>ファイル名 (ファイル名)</TD><TD>" + file.getFileName() + "</TD></TR>"); out.println("<TR><TD>ファイル拡張子 (FileExt)</TD><TD>" + file.getFileExt() + "</TD></TR>"); out.println("<TR><TD>ファイルの完全名 (FilePathName)</TD><TD>" + file.getFilePathName() + "</TD></TR>"); out.println("</TABLE><BR>"); // ファイルを // file.saveAs("/upload/" + myFile.getFileName()) として保存します。 // WEBアプリケーションのルートディレクトリをファイルルートディレクトリとしたディレクトリに保存 // file.saveAs("/upload/" + myFile.getFileName(), su.SAVE_VIRTUAL); // オペレーティング システムのルート ディレクトリがファイルのルート ディレクトリとなるディレクトリに保存します。 // file.saveAs("c:\temp\" + myFile.getFileName(), su.SAVE_PHYSICAL); } %> </body> </html> |
<!-- ファイル名: ダウンロード.html 著者: Zongheng Software Production Center ([email protected]) の Yu Yiqi --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <頭> <title>ダウンロード</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <本文> <a href="jsp/do_download.jsp">クリックしてダウンロード</a> </body> </html> |
<%@ page contentType="text/html;charset=gb2312" import="com.jspsmart.upload.*" %><% // 新しい SmartUpload オブジェクトを作成します SmartUpload su = new SmartUpload(); //初期化 su.initialize(pageContext); //ブラウザが自動的にファイルを開かないようにするには、contentDisposition を null に設定します。 // リンクをクリックした後、ファイルがダウンロードされていることを確認します。設定しない場合、ダウンロードしたファイルの拡張子が //doc の場合、ブラウザは自動的に Word でファイルを開きます。拡張子がpdfの場合、 // ブラウザは acrobat で開きます。 su.setContentDisposition(null); // ファイルをダウンロード su.downloadFile("/upload/最初のゴールドポットを獲得する方法.doc"); %> |
public void downloadFile(String s, String s1, String s2, int i) ServletException、IOException、SmartUploadException をスローします { if(s==null) throw new IllegalArgumentException("ファイル '" + s + "' 見つかりません (1040)。"); if(s.equals("")) throw new IllegalArgumentException("ファイル '" + s + "' 見つかりません (1040)。"); if(!isVirtual(s) && m_denyPhysicalPath) throw new SecurityException("物理パスは 拒否されました (1035)。"); if(isVirtual(s)) s = m_application.getRealPath(s); java.io.File ファイル = 新しい java.io.File; FileInputStream ファイル入力ストリーム = 新しい FileInputStream(ファイル); 長い l = ファイル.長さ(); ブール値フラグ = false; int k = 0; バイト abyte0[] = 新しいバイト [i]; if(s1==null) m_response.setContentType("application/x-msdownload"); それ以外 if(s1.length() == 0) m_response.setContentType("application/x-msdownload"); それ以外 m_response.setContentType(s1); m_response.setContentLength((int)l); m_contentDisposition = m_contentDisposition != null ? m_contentDisposition : "添付ファイル;"; if(s2 == null) m_response.setHeader("コンテンツの性質", m_contentDisposition + " ファイル名 = + toUtf8String(getFileName(s))); それ以外 if(s2.length() == 0) m_response.setHeader("コンテンツの性質", m_contentDisposition); それ以外 m_response.setHeader("コンテンツの性質", m_contentDisposition + " ファイル名 = + toUtf8String(s2)); while((long)k < l) { int j = fileinputstream.read(abyte0, 0, i); k += j; m_response.getOutputStream().write(abyte0, 0, j); } ファイル入力ストリーム.close(); } /** ※ダウンロード時に保存されたファイル名が正しく表示されるよう、ファイル名の漢字をUTF8エンコード文字列に変換します。 * Zongheng Software Production Center Yu Yiqi 2003.08.01 * @param の元のファイル名* @return 再エンコードされたファイル名*/ public static String toUtf8String(String s) { StringBuffer sb = new StringBuffer(); for (int i=0;i<s.length();i++) { char c = s.charAt(i); if (c >= 0 && c <= 255) { sb.append(c); } それ以外 { バイト[] b; 試す { b = Character.toString(c).getBytes("utf-8"); } catch (例外例) { System.out.println(ex); b = 新しいバイト[0]; } for (int j = 0; j < b.length; j++) { int k = b[j]; if (k < 0) k += 256; sb.append("%" + Integer.toHexString(k). toUpperCase()); } } } sb.toString()を返します; } |