Javaファイルのアップロードとファイルのダウンロードは、プログラム開発における比較的一般的な機能です。次の記事では、Javaにファイルアップロードとダウンロードを実装するための3つのソリューションを紹介します。特定の詳細は次のとおりです。
最初のポイント:Javaコードを実装してファイルアップロードします
formfile file = manform.getFile(); string newFileName; string newpathname = null; string fileaddre = "/numup"; try {inputstream stream = file.getInputStream(); //ファイルを文字列filepath = request.getrealpath(fileaddre); file1).mkdir(); newFileName = System.CurrentTimeMillis()+ file.getFileName()。substring(file.getFileName()。lastIndexof( '。')); bytearrayoutputStream(); new bytearrayoutputStream(); outputStream bos = new fileoutputstream(filepath+ "/"+ "+"+ newFileName); newPathname = filepath+"/"+newFileName; system.out.println(newpathname); //ファイルsystem.out.println(filepath+"/"+file.getFileName()); int bytesRead = 0; buffer = new byte [8192]; while((bytesread = stream.read(buffer、0、8192))!= -1){bos.write(buffer、0、bytesread); //ファイルをサーバーに書き込み} bos.close(); stream.close();} catch(filenotfoundexexcection e){e.printstacttrace();} catch();} {e.printstacktrace();}2番目のポイント:JSPページにファイルアップロードを実装
パッケージcom.vogoal.util; Import java.io.bufferedoutputStream; Import java.io.file; Import java.io.fileoutputStream; Import java.io.ioexception; Import java.text.simpledateformat; import java.util.dateable; import java.util.dateable; javax.servlet.servletinputStream; Import javax.servlet.http.httpservletrequest; public class jspfileupload {/** request object*/private httpservletrequest = null;/**ファイルをアップロードするためのパス*/private string = null; = 1024*8;/**パラメーターを格納するハッシュテーブル** @param request* httpservletrequest requestオブジェクト*/public void setRequest(httpservletrequest request){this.request = request;}/***ファイルアップロードパスを設定します。 * * @param Path *ユーザーが指定したファイルのアップロードパス。 */public void setuploadpath(string path){this.uploadpath = path;}/***ファイルアップロード処理のメインプログラム。 �������B * * @return int操作結果0ファイル操作が成功しました。 1要求オブジェクトは存在しません。 2ファイル保存パスが設定されていないか、ファイル保存パスが正しくありません。 3*正しいenctypeは設定されていません。 4ファイル操作は異常です。 */public int process(){int status = 0; //ファイルをアップロードする前に、リクエストオブジェクトを確認し、パスとenctypeをアップロードします。 status = precheck(); //エラーが発生したときにエラーコードを返します。 if(status!= 0)return status; try {//��パラメーターまたはファイル名�u���string名= null; // parameter valuestring value = null; //読み取りストリームがファイルフラグビットboolean fileflag = false; //格納されます。ファイルtmpfile = null; //アップロードされたファイル文字列fname = null; fileoutputStream baos = null; bufferedoutputStream bos = null; // hashtableparamht = new Hashtable(); updfilearr = new Arraylist(); int rtnpos = 0; buffs new buffs fubls = new raylist(); updfilearer = new arraylist(); contentTypestring contentType = request.getContentType(); int index = contentType.indexof( "boundary ="); string boundary = " - " + contentType.substring(index + 9); string endboundary = bandary + " - "; //�リクエストオブジェクトからストリームを取得します。 servletinputStream sis = request.getInputStream(); // 1行を読み取りますwhile((rtnpos = sis.readline(fuffs、0、buffs.length)) name.trim()。length()> 0){if(fileflag){bos.flush(); baos.close(); bos.close(); baos = null; bos = null; updfilearr.add(fname);} els {object obj = namht.get(name); arraylist allist al arrylist( {al =(arraylist)obj;} al.add(value); system.out.println(value); paramht.put(name、al);}} name = new String(); value = new String(); fileflag = false; fname = new String(); rtnpos = sis.redline new String(fuffs、0、rtnpos); if(strbuff.tolowercase()。startswith( "content-disposition:form-data;"))){int nindex = strbuff.tolowercase()。 strbuff.substring(nindex + 6、nlastindex);} int findEx = strbuff.tolowercase()。 10、flastindex); fname = getFileName(fName); if(fname == null || fname.trim()。length()== 0){fileflag = false; sis.readline(fuffs、0、buffs.length); sis.readline(0、buffs.length(fuffs、0、contion;} els {fname = getFileNameBytime(fname); buffs.length); sis.readline(buffs、0、buffs.length);}}} ells if(strbuff.startswith(endboundary)){if(name!= null && name.trim()。 null; updfilearr.add(fname);} else {object obj = paramht.get(name); arraylist al = new arraylist(); if(obj!= null){al =(arraylist)obj && bos == null){tmpfile = new file(uploadpath + fname); baos = new fileoutputStream(tmpfile); bos = new BufferedOutputStream(baos);} bos.write(buff、0、rtnpos); baos.flush(); strbuff); value = value + strbuff;}}}} catch(ioexception e){status = 4;} private int precheck(){int errcode = 0; if(request == null)return 1; if(upload == null || uploadpath.trim()。length()== 0)return 2; else {file tmpf = new file(uploadpath); if(!tmpf.exists())return 2;} string contentType = request.getContentType(); if(contentType.indexof( "multipart/data" name){string value = ""; if(name == null || name.trim()。length()== 0)return value =(paramht.get(name)= null)? "" :( string)((arraylist)((arraylist)paramht.get(name))。 name.trim()。length()== 0)return null; if(paramht.get(name)== null)return null; arraylist al =(arraylist)paramht.get(name); strarr = new string [] new String [); int getUpDfilesize(){return updfilearr.size();} public string [] getupdfileNames(){string [] strarr = new String [updfilearr.size()]; getFileName(string input){int findex = input.lastindexof( "//"); if(findex == -1){findex = input.lastIndexof( "/"); if(findex == -1){return input;}} input = input.substring(findex + 1); return induct indexfileNamame( input.indexof( "。"); date dt = new date(); simpledateFormat sdf = new simpledateFormat( "yyyymmddhhmmmsssssss"); return input.substring(0、index) + sdf.format(dt) + input.substring(index);}}}}2。JSPページでJavaクラスを参照してください。
<%@page Import = "com.vogoal.util.jspfileupload"%> <%// initialize jspfileupload jfu = new jspfileupload(); // request object jfu.setrequest(request); //アップロードされたファイルパスを設定します。 JFU.PROCESS(); //形式の文字列username = jfu.getParameter( "username"); //同じパラメーターの複数の入力コントロールがある場合、Array string [] usernamearr = jfu.getParameters( "username"); jfu.getupdfileNames(); //アップロードされたファイルの数を取得します。この方法は少し役に立たないint filenumber = jfu.getupdfilesize(); //次のものはテストのコード出力です。 // out.println( "parameter:" + username); // out.println( "parameter size:" + usernamearr.length); // out.println( "feearr size:" + feearr.length);
3番目のポイント:Struts2はファイルのアップロードとダウンロードを実装します
ステップ1:commons-fileupload-1.2.1.jarとcommons-io-1.3.2.jarのweb-inf/libを追加します。これらの2つのファイルは、http://commons.apache.org/からダウンロードできます。
ステップ2:フォームテーブルのenctypeを次のように設定します。「MultiPart/Form-Data」、次のように:
Javaコード
public class uploadaction {private file uploadimage; //ファイルプライベート文字列uploadImageContentType; //ファイルタイププライベート文字列uploadimageFileName; //ファイル名プライベート文字列bookName; // book name private string著者; //著者プライベート文字列savepath // aTtribute/setterメソッドパブリック文字列アップロード()スロー例外() }}注:フォームのファイルドメインは、アクションの3つのプロパティ、つまりファイル名とファイルタイプに対応します。命名は固定されています。ファイル名は、フォームのファイルドメイン名と同じでなければなりません(uploadImage)。ファイル名は次のとおりです。ファイル +ファイル名、およびファイルタイプ:ファイル + contentType。
ステップ4:struts.xmlにアップロードするアクションを構成します。
Javaコード
<アクションname = "upload"> <param name = "savepath">/uploadfile </param> <sults> /success.jsp </result> </action>
注:サーバー上のアップロードされたファイルの保存ディレクトリを指定するには、アップロードでSavePath変数を定義し、対応するセッターとGetterメソッドを追加する必要があります。そのため、Struts2はSavePath属性に /uploadFile値を割り当てることができます。
手動構成ファイルフィルタリングタイプ
<param name = "AlldyTypes"> image/bmp、image/png、image/gif、image/jpeg </param>
手動構成ファイルサイズ制限
<param name = "Maximumsize"> 1048576 </param>
Struts2のファイルアップロードインターセプターを使用して、ファイルフィルタリングを実装します
struts2は、ファイルアップロードインターセプター-fileuploadを提供します。このインターセプターを構成することにより、アップロードされたファイルのフィルタリングを簡単に実現できます。
Fileuploadインターセプターを構成する場合、2つのパラメーターを指定できます。
AldoctTypes:英語のコンマ(、)で区切られたアップロードを許可されているファイルタイプを指定します。
最大値:バイトでアップロードできるファイルサイズを指定します。
ヒント:Fileuploadインターセプターを構成することにより、ファイルフィルタリングを簡単に実装できます。ファイルフィルタリングが失敗すると、システムは自動的に入力論理ビューに転送されます。したがって、名前付き入力の論理ビューは、アクション用に構成する必要があります。さらに、defaultStackのインターセプター参照をアクション用に構成する必要があります。
Struts2のインターセプターを使用して、次のようにファイルフィルタリング構成を実装してください。
<アクションname = "uploadFileAction"> <interceptor-ref name = "defaultStack"> <! - 複数の使用を許可されたファイルタイプを構成します。 <! - アップロードできるファイルサイズ、ユニットバイト、この例は1mb-> <param name = "fileupload.maximumsize"> 1048576 </param> </interceptor-ref> <result name = "input">/jsp/onefilefileupload.jsp </result nams> <</j sucturs "> jsp </jsp </jsp <
ユーザーがアップロードに失敗すると、特定のプロンプトメッセージがあります。 struts2では、<s:fielderror/>タグを使用して、エラーメッセージをページに出力します。
注:Struts2エラープロンプト情報を使用する場合、ファイルをアップロードするアクションクラスはActionSupportを継承する必要があります。
リソースファイル(.properties)を構成して、情報出力をユーザーに保存できます。
struts.messages.eror.file.too.large:アップロードファイルサイズが設定値を超えると、struts2はキーに対応するプロンプト情報を出力します。
struts.messages.error.content.type.not.allowed:アップロードされたファイルタイプが設定値を満たしていない場合、struts2はキーに対応するプロンプト情報を出力します。
struts.messages.error.uploading:ファイルをアップロードするときに不明なエラーが発生した場合、struts2はキーに対応するプロンプト情報を出力します。
また、リソースファイルをstruts.xmlファイルに構成する必要があります。次に、リソースファイルを表示する必要があります。すでに中国語が含まれています。それを変換してから、プロジェクトに構成する必要があります。
struts.xmlでリソースファイルを設定します。
<constant name = "struts.custom.i18n.resources" value = "messages"/>または<constant name = "struts.custom.i18n.resources" value = "messages_zh_cn"/>
コマンドnative2ascii d:/messages.properties d:/messages_zh_cn.propertiesを使用して、元のリソースファイルをサポートされているリソースファイルに変換します。
注:International Keep、リソースファイルの名前の接尾辞は: *_zh_cn +ファイル拡張子です。
複数のファイルをアップロードする原則は上記と同じですが、複数のファイルフィールドの名前属性名は同じでなければならず、動作中のファイル[]またはlist <ファイル>を使用して受信する必要があることに注意する必要があります。
私は個人的には、この方法を使用して複数のファイルをアップロードすることはそうではないと思います
とても良い。
ファイルダウンロード用のstruts2
Struts2は、ファイルのダウンロードをサポートするために特別に使用されるストリーム結果タイプを提供します。ストリーム結果タイプを指定する場合、入力パラメーターを構成する必要があります。これは、ダウンロードされたファイルの入り口である入力ストリームを指定します(つまり、ファイルはこのエントリを通じてストリームでダウンロードできます)。
ファイルのダウンロードのアクションを実装します
Public Class FiledOwnLoadactionはアクションを実装しています{//このプロパティ値は、構成ファイルで指定されています。 Struts2は自動的に注入します(つまり、値を割り当てます)。セッターとゲッターメソッドのプライベート文字列inputpathを提供する必要があります。 <result ... // public inputstream getTargetFile()の対応する入力名プロパティ値は例外{return servletactioncontext.getServletContext()。 } //ユーザーリクエストを処理する実行メソッド。 }}struts.xmlファイルの対応するアクション構成
<アクションname = "ダウンロード"> <! - ダウンロードされたリソースの場所を指定 - > <param name = "inputpath">/uploadfile/demo.txt </param> <! - 結果タイプをストリームとして構成 - > <result name = "success" type = "> < name = "inputname">ターゲットファイル</param> <! - ダウンロードされたファイルのダウンロード方法と、ダウンロード時に保存されたファイル名を指定します。ファイルを保存するときのファイル名は拡張機能を持っている必要があり、拡張機能はダウンロードタイプのアイコンを示します - > <param name = "contentDisposition"> attachment; filename = struts2.txt </param> <! - ダウンロードされたファイルのバッファサイズを指定 - > <param name = "bufferize"> 4096 </param> </rusts> </action> </action> </action> </action
上記は、編集者が紹介したJavaでファイルアップロードとダウンロードを実装するための3つのソリューションです。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!