この記事では、2つのファイルアップロードの例を比較して、Javaファイルのアップロード機能をよりよく学習するのに役立ちます。特定のコンテンツは次のとおりです
1。Java添付ファイルアップロードコード
@controllerpublic class uploadfile拡張basejsoncontroller {/** *添付ファイルアップロード * * @param creativefile * @param response * @return */@requestmapping(value = "/upload/uploadfile.json")public uplodfile * 1.サーバーのセキュリティを確保するには、アップロードされたファイルをWeb-INFディレクトリなどの外部世界で直接アクセスできないディレクトリに配置する必要があります。 * 2。ファイルの上書きを防ぐには、ファイルをアップロードするために一意のファイル名を生成する必要があります。 * 3。ディレクトリの下に多くのファイルが表示されないようにするには、ハッシュアルゴリズムを使用してストレージを分割する必要があります。 * 4。アップロードされたファイルの最大値は制限する必要があります。 * 5。アップロードされたファイルのタイプを制限するには、アップロードされたファイル名を受信するときに、接尾辞名が合法かどうかを判断します。 *///アップロードされたファイルの保存ディレクトリを取得し、アップロードされたファイルをWeb-INFディレクトリに保存し、外部の世界から直接アクセスしてアップロードされたファイルのセキュリティを確保することはできません。 //アップロード中に生成された一時ファイル保存ディレクトリ= request.getSession()。getServletContext()。getRealPath( "/web-inf/temp");ファイルtmpfile = new file(temppath); if(!tmpfile.exists()){//一時ディレクトリtmpfile.mkdirs();を作成します。 } //メッセージはjsonarray arr = new jsonarray()をプロンプトします; map <string、object> map = null; inputstream in = null; fileoutputStream out = null; {// Apacheファイルアップロードコンポーネントを使用して、ファイルのアップロード手順:// 1を処理してください。 DiskFileItemFactory Factory DiskFileItemFactory = new DiskFileItemFactory()を作成します。 //工場のバッファーのサイズを設定します。アップロードされたファイルサイズがバッファーのサイズを超えると、一時ファイルが生成され、指定された一時ディレクトリに保存されます。 Factory.SetsizethReshold(1024*100); //バッファサイズを100kbに設定します。指定されていない場合、バッファサイズはデフォルトでは10kbです。 // Factory.setRepository(TMPFile)のアップロード中に生成された一時ファイルのストレージディレクトリを設定します。 // 2。ファイルの作成Parser servletfileupload upload = new servletfileupload(Factory); //ファイルをアップロードアップロード進行状況upload.setProgressListener(new ProgressListener(){public void update(long pbytesread、long pcontentlength、int arg2){system.out.println( "ファイルサイズは:" + pcontentlength + "、現在処理されています:" + pbytesRead);}); //中国の文字盤upload.setheaderencoding( "utf-8")を解く; // 3。提出されたデータがアップロードフォームのデータであるかどうかを判断しますif(!servletfileupload.ismultipartcontent(request)){//従来の方法に従ってデータを取得します。 } //アップロードされた単一ファイルの最大サイズを設定します。これは現在1024*1024バイトに設定されています。 //アップロードされたファイルの総数の最大値を設定します。最大値=複数のファイルの最大サイズの合計が同時にアップロードされます。現在、40MBのupload.setsizemax(1024*1024*40)に設定されています。 // 4。 ServletFileuploadパーサーを使用して、アップロードされたデータを解析します。解析結果は、リスト<fileitem>コレクションを返します。各fileItemは、フォーム@suppresswarnings( "unchecked")list <fileitem> list = upload.parserequest(request); for(fileitem item:list){//通常の入力項目のデータがfileitem if(item.isformfield()){string name = item.getfieldname(); //通常の入力項目のデータのデータの文字化された問題を解決するstring value = item.getString( "utf-8"); // value = new String(value.getBytes( "ISO8859-1")、 "utf-8"); System.out.println(name + "=" + value); } else {//ファイルアイテムがアップロードされたファイルにカプセル化されている場合//アップロードされたファイル名、文字列filename = item.getName(); if(filename == null || filename.trim()。equals( "")){continue; } //注:さまざまなブラウザによって送信されたファイル名は異なります。一部のブラウザは、次のようなパスでファイル名を送信します。C:/a/b/1.txt、一部は次のような単純なファイル名です。 //アップロードされたファイル文字列fileextname = filename.substring(filename.lastindexof( "。")+1)の拡張子を取得します。 //アップロードされたファイルタイプを制限する必要がある場合、ファイル拡張子を使用して、アップロードされたファイルタイプが合法かどうかを判断できます。 } /*************** /// item = item.getInputStream()にアップロードされたファイルの入力ストリームを取得します; /*****************///ファイルの名前を取得しますstring savefileName = makefileName(filename); //ファイルを取得するディレクトリ文字列realsavepath = makepath(savefilename、savepath); //ファイル出力ストリームを作成= new fileoutputStream(realSavePath + "//" + savefileName); //バッファバイトバッファーを作成[] = new Byte [1024]; //入力ストリーム内のデータが読み取られているかどうかの識別はint len = 0です。 //ループはバッファーに入力ストリームを読み取ります(len = in.read(バッファー))> 0は、(len = in.read(buffer))> 0){// fileoutputStream出力ストリームを使用することを意味します。 } //入力ストリームを閉じますin.close(); //出力ストリームを閉じます。close(); //ファイルアップロードitem.delete()を処理するときに生成された一時ファイルを削除します。 map = new hashmap <string、object>(); map.put( "savefilename"、savefilename); Map.put( "RealSavePath"、RealSavePath); arr.add(map); }} returnSuccessjson( "uploadbase.filesizelimitex cehcededexception e){e.printstacktrace(); returnfailjson()、"単一ファイルは最大値を超えています!!! "、応答);} catch(fileuuploadbase.sizelimitexception e) returnfailjson()、「アップロードされたファイルは最大限界を超えています!」 in.close(); @return uuid + "_" +ファイルの元の名前 */private string makefilename(string filename){//2.jpg //ファイル上書きを防ぐには、ファイルをアップロードするために一意のファイル名を生成する必要があります。 } / ** *ディレクトリに多くのファイルが表示されないようにするには、ハッシュアルゴリズムを使用してストレージを分割する必要があります * @method:make * @description: * @anthor:xuwentao * * @param filenameファイル名、ファイル名に基づいてストレージディレクトリを生成します//ファイル名のハッシュコード値を取得し、取得するのはメモリint hashcode = filename.hashcode()の文字列オブジェクトファイル名のアドレスです。 int dir1 = hashcode&0xf; // 0-15 int dir2 =(hashcode&0xf0)>> 4; // 0-15 //新しい保存ディレクトリ文字列dir = savepath + "//" + dir1 + "//" + dir2; // upload/2/3 upload/3/5 //ファイルはファイルとディレクトリファイル= new file(dir)の両方を表すことができます。 //ディレクトリが存在しない場合(!file.exists()){//ディレクトリfile.mkdirs(); } return dir; }}2。Java履歴書コードをアップロードします
/ ** resume*1ファイルの作成2-例外3-exception 3-upload失敗4ファイルが削除されていない6ファイル削除されていない6ファイルアップロードワード、Excel、PDFファイルを確保する*//*パスセパレーター:適応型オペレーティングシステム*で使用*/プライベート静的最終文字列ファイルfile_separator = System.getProperatis()。 / ** * file * * @param fileio * @param oldcontracturl * @param request * @return戻りファイルアドレス(相対アドレス、非absoluteアドレス) //ファイルとフォルダーの削除if(oldcontracturl!= null){string olddirectory = oldcontracturl.substring(5、oldcontracturl.lastindexof(file_separator)); file file = new file(uploadurl + oldDirectory); boolean flag = deletedir(file); if(!flag){logger.error( "古いファイル削除が失敗した"); 「5」を返します。 }} //新しい履歴書ファイルをアップロードします= System.CurrentTimemillis(); uploadurl = uploadurl + file_separator + now + file_separator;文字列resumename = ""; if(!fileio.isempty()){resumename = stringutils.deletewhitespace(fileio.getoriginalfilename()); // judge file suffix/*string suffix = resumename.substring(resumename.lastindexof( "。")、resumename.length()).tolowercase(); if(! "。doc" .equals(suffix)&&! "。docx" .equals(suffix)&&! "。xlsx" .equals(suffix)&&! logger.error( "単語、excel、ppt、pdfファイルではありません"); 「6」を返します。 }*/} else {logger.error( "ファイルが取得されていない"); 「4」を返します。 } file dir = new file(uploadurl); if(!dir.exists()){dir.mkdirs(); }ファイルターゲットファイル= newファイル(uploadurl + resumename); if(!targetfile.exists()){try {targetfile.createNewfile(); } catch(ioException e){logger.error( "ファイル作成に失敗した"、e); "1"を返します。 }} try {fileio.transferto(targetfile); } catch(IllegalStateException e){Logger.Error( "文の例外"、e); 「2」を返します。 } catch(ioException e){logger.error( "upload failed"、e); 「3」を返します。 } return file_separator + "files" + file_separator + now + file_separator + resumename; } /***ディレクトリ内のすべてのファイルとサブディレクトリ内のすべてのファイルを再帰的に削除します* @param dirファイルディレクトリを削除する* @return booleanは、すべての削除が成功した場合に「true」を返します。 *削除が失敗した場合、メソッドは「false」を削除して返すことを停止します。 */ public boolean deletedir(file dir){if(dir.isdirectory()){string [] children = dir.list(); //(int i = 0; i <children.length; i ++){boolean success = deletedir(new file(dir、children [i]))のディレクトリ内のサブディレクトリを再帰的に削除するif(!success){return false; }}} //ディレクトリはこの時点で空です。return dir.delete(); }上記はこの記事のすべての内容です。 Javaファイルをアップロードするスキルをすべての人の学習と習得に役立つことを願っています。