前のセクションでは、製品の追加と更新の機能を完了しました。これらの2つの部分には、製品の写真のアップロードが含まれますが、詳細な説明はありません。この目的のために、この記事では、Struts2の機能を紹介してファイルアップロードを実装します。
1。ファイル情報をカプセル化します
まず、ファイル情報をカプセル化するモデルが必要です。このモデルには、ファイル、ファイルタイプ、ファイル名の3つの属性が必要です。渡したい写真については、次のように新しいモデルを作成します。
public class fileimage {private file;プライベート文字列contentType;プライベート文字列ファイル名; public file getFile(){return file; } public string getContentType(){return contentType; } public string getFileName(){return filename; } public void setupload(file file){//セットメソッドは属性名と同じではありませんが、フォアグラウンドから渡されたときのパラメーターは、設定メソッド名と同じでなければなりません。つまり、フォアグラウンドで渡されるパラメーターはfileimage.upload this.file = file; } public void setuploadContentType(string contentType){this.contentType = contentType; } public void setuploadfilename(string filename){this.filename = filename; }}このようにして、モデルが記述されます。ファイルアップロードのロジックが単一のアクションに固有のものではないことを考慮すると、ファイルのアップロードのロジックをツールクラスに書き込み、すべてのアクション呼び出しを作成できます。そこで、新しいファイルアップロードツールクラスを作成します(インターフェイスプログラミング用に、ツールクラスインターフェイスも抽出します):
2。ファイルアップロードツールクラスを完了します
//ファイルアップロードツールクラスインターフェイスパブリックインターフェイスfileupload {//ファイルアップロードの関数を実装するには、public abstract string uploadfile(fileimage fileimage)をアップロードした後に新しいファイル名を返します。 } //ファイルアップロードツールクラス固有の実装@component( "fileupload")public class fileuploadutilを実装fileupload {private string filepath; @value( "#{prop.filepath}")//@値は、beans.xmlファイルにid = "prop"を持つbeanを見つけることを意味します。 Annotationを介してプロパティ構成ファイルを読み取り、対応する構成ファイルのpublic void setFilepath(String filepath){system.out.println(filepath); this.filepath = filepath; } // 1。 [拡張子]プライベート文字列getfileext(string filename)を取得{filenameutils.getExtension(filename); } // 2。新しいファイル名としてランダムuuid番号を生成しますプライベート文字列newFileName(String filename){string ext = getFileExt(filename); uuid.randomuuid()。toString() + "。"を返します。 + ext; } //ファイルアップロードの関数を実装し、upload @Override public String uploadFile(fileimage fileimage){//新しい一意のファイル名String pic = newFileName(fileMage.getFileName())を取得した後に新しいファイル名を返します。 try {fileutil.copyfile(filemage.getFile()、new file(filepath、pic)); //最初のパラメーターはアップロードされたファイルであり、2番目のパラメーターはファイルを新しいパスリターン写真にコピーすることです。 } catch(Exception e){新しいruntimeException(e); }最後に{fileimage.getFile()。delete(); }}}上記の@valueアノテーションがあります。これは、ファイルがプロパティファイルから保存されるパスを取得するためです。詳細については、次のように参照してください:Springを参照して、構成ファイル情報を取得します。
3.カプセル化されたファイルクラスと動作中のツールクラスを注入する
ファイルのカプセル化クラスとファイルアップロードツールクラスを記述した後、これらの2つのオブジェクトをアクションに挿入する必要があります。これにより、ファイルのアップロード関数をアクションに実装できます。
@Controller( "BaseAction")@scope( "Prototype")Public Class BaseAction <T> ActionSupport RequestAware、SessionAware、ApplicationAware、ModelDriven <T> {//保護されたFileImage fileimage; //ファイルツールクラス@Resource保護されたFileupload fileuploadをアップロードします。 public fileimage getFileImage(){return fileimage; } public void setFileImage(fileimage fileimage){this.fileimage = fileimage; } //他の無関係なコードを省略します...} 4.ファイルアップロードを実装します
さて、これで、ファイルアップロードをProductactionに実装できます。ツールクラスが書かれている場合、アクション内のコードの量は非常に少なくなり、これもカプセル化によってもたらされる利点です。
@Controller( "Productaction")@Scope( "Prototype")Public Class Productaction Extends BaseAction <//他の無関係なコードを省略します... public void save()throws Exception {// fileuploadツールクラスは抽出されます。 model.setpic(pic); model.setdate(new date()); System.out.println(モデル); //製品情報はProductservice.save(model)に保存されます。 } public void update(){string pic = fileupload.uploadfile(fileimage); model.setpic(pic); model.setdate(new date()); System.out.println(モデル); // ProductService.update(モデル)を更新します。 }}このようにして、フロントデスクからファイルをアップロードする機能を完了します。
元のアドレス:http://blog.csdn.net/eson_15/article/details/51366384
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。