前に書いてください
ファイルアップロードに関しては、最初にビジネスロジックについて話す必要があります。誰もがアップロードされたファイル(ホームページの広告やバナーなど)を見ることができる場合、画像を静的リソース領域(CSSおよびJSと同じ場所)に配置します。ファイルが保護されている場合(ユーザーは自分でアップロードされた写真のみを表示できます)、写真が特別に保存されているサーバー上の場所に保存します。
この例は、2つの場所に保存されているファイルをアップロードする方法を示しています。アップロード後、拡張機能として、アップロードされたファイルを表示してアップロードされたファイルをダウンロードする機能も追加されます。
準備
SpringMVCを構成し、Commonsパッケージをインポートします
MVC-Servlet.xmlでファイルアップロードパーサーを構成します
<! - ファイルアップロードパーサー - > <bean id = "multipartresolver"> <プロパティ名= "maxuploadsize" value = "1000000"/> <プロパティ名= "defaultencoding" value = "utf-8"/> </bean> </bean>
静的リソースエリアに保存されています
1。ストレージ場所:
プロジェクトに保存されているため、パスはプロジェクトに対するパスです。
/{YourProject}/webApp/static/img
2。応答性のあるハンドラーを構成します
@controllerpublic class uploadcontroller {@getMapping( "/upload")public string uploadhandler(){return "upload"; } @PostMapping( "/upload/static")public void writostatic(httpservletrequest request、redirectattributes redirectattributes、 @requestparam( "filename")multipartfile file){if(!file.isempty()){//ターゲットの折り畳み式の文字列= get.get.ervretcont( " 「static/img/」; //ユーザー文字列filename = file.getoriginalFileName()によってアップロードされたソースファイル名を取得します; //新しいファイルfile1 = new file(path、filename)を作成します。 // file.transferto(file1)にファイルを書き込みます。 redirectattributes.addflashattribute( "message"、 "static success to static success"); "redirect:/upload"を返します。 } else {redirectattributes.addflashattribute( "message"、 "ファイルのアップロードは空になりません"); "redirect:/upload"を返します。 }}}サーバーに保存します
1。この例の保存場所:
サーバー上の特定の場所に保存されており、プロジェクトとは何の関係もないため、アドレスは絶対的なパスです。
/users/mac/desktop/imgtemp/は、ディレクトリへの絶対パスです。
2。応答性のあるハンドラーを構成します
... @postmapping( "/upload/disk")public string writetodisk(httpservletrequest request、 @requestfile ")multipartfileファイル、redirectattributes redirectattributes){if(!file.isempty()){//ソースファイル= filename = filename = fileiginalefiname() // [ファイル]フォルダーパス文字列= "/users/mac/desktop/imgtemp/"; //新しいファイルfile1 = new file(path、filename)を作成します。 // file.transferto(file1); }} ...拡張部品(ファイルの表示とダウンロード)
応答はファイルをストリームの形で渡すことであるため、ブラウザによって正しく解析されるように、応答のmimieタイプを正しく設定する必要があります。アプリケーションファイルのデフォルトのマイミータイプは、アプリケーション/オクテットストリームです。 MIMEがこの値に設定された後、ブラウザはそのようなファイルの実行を自動的に実行または要求することはなく、添付ファイルの形でファイルをローカルエリアに直接ダウンロードします。
Mimieのより多くの解釈については、この記事を確認してください
ダウンロードファイルの名前をカスタマイズする場合は、コンテンツディスポジションメッセージを設定する必要があります。
コンテンツディスポジションメッセージヘッダーは、インライン(つまり、Webページまたはページの一部)であろうと、添付ファイルの形でローカルにダウンロードおよび保存されているかどうかにかかわらず、表示される返信の形式を示します。
コンテンツ拡散の詳細については、この記事をご覧ください
...@getMapping( "/download/bydefault")public void getimgbydefault(@requestparam string filename、@requestparam(必須= false、defaultValue = "")string savename)、httpservletresponse応答{(stringutils.isempty(filename)){response.enderror(404);戻る; } //ファイルストレージのパス文字列パス= "/users/mac/desktop/imgtemp/"; //新しいファイルファイル=新しいファイル(PATH、FILENAME); if(!file.exists()){respons.senderror(404);戻る; } //リクエストパラメーターsavenameが空でない場合、ファイルをダウンロードif(!stringutils.isempty(savename)){//応答長response.setContentLength((int)file.length()); // Applicationへの応答のMIMEタイプを設定します/Octet-Stream Response.SetContentType(Mediatype.Application_octet_stream_value); savename = new String(savename.getBytes( "utf-8")、 "ISO8859-1"); //添付ファイルへのコンテンツ拡散を設定します。 filename = savename response.setheader(httpheaders.content_disposition、 "attachment; filename =/" "+savename+"/""); } //ファイルを読み取りますinputstream is = new fileinputStream(file); outputStream os = response.getOutputStream(); //出力ファイルioutils.copy(is、os); os.flush(); os.close(); is.close();}また、springMVCに付属するbytearrayhttpmessageconverterコンバーターを使用して、httpmessageconverterインターフェイスを実装するファイルを出力することもできます。すべてのmimeリクエスト情報を読むことができ、応答情報のmimeはアプリケーション/オクテットストリームです
...@getMapping( "/download/byconvert")public httpentity <byte []> getimgbyconvert(@requestparam string filename、@requestparam(reby = false、default、default = "")string savename){if(stringutils.isempty(filename))) } string path = "/users/mac/desktop/imgtemp/"; file file = new file(path、filename); if(!file.exists()){return new ResponseNtity <>(httpstatus.not_found); } httpheaders headers = new httpheaders(); if(!stringutils.isempty(savename)){headers.setContentType(mediatype.application_octet_stream_value); headers.setContentLength(file.Length()); savename = new sting(savename.getBytes( "utf-8")、 "ISO8859-1"); headers.add(httpheaders.content_disposition、 "attachment; filename =/" " + savename +"/""); } else {headers.setContentType(mediatype.image_png); } return new httpentity <>(filecopyutils.copytobytearray(file)、headers);}upload.jsp
<%@ page contentType = "text/html; charset = utf-8"言語= "java"%> <%@ taglib prefix = "form" uri = "http://www.springframework.org/tags/form"%@@ haglib prefix = "C" "" "" " uri = "http://java.sun.com/jsp/jstl/core"%> < <Meta http-equiv = "x-ua-compatible" content = "ie = edge"> <title> document> <link rel = "styleSheet" href = "/static/bootstrap-3.3.5-dist/css/bootstrap.css" rel = "external nofollow"> </head <body> <body> <body> <body> test="${not empty message}"> <h2>${message}</h2> </c:if> <form:form enctype="multipart/form-data" action="/upload/static"> <p>Upload to /web/static</p> <label for="">Upload file:</label> <input type="file" name="uploadFile"> <button>Submit</button> </form:form> <form:form enctype = "multipart/form-data" action = "/upload/disk"> <p> diskにアップロード</p> <label for = ""> upload </label> <input> <input> <input "file" name = "uploadfile"> <ボタン> </ボタン> < href = "/download/bydefault?filename = dubbo.png" rel = "external nofollow"ターゲット= "_ blank">デフォルトのメソッドを使用してディスクにアップロードされたdubbo画像を表示</a> </button> <ボタン> < >デフォルトメソッドを使用してダボ画像をダウンロード</a> </button> </div> <div> <button> <a href = "/download/byconvert?filename = dubbo.png" rel = "external nofollow">デフォルトのメソッドを使用してダボ画像をダウンロードします</a> </button> </<div> <button> < href = "/download/byconvert?filename = dubbo.png" rel = "external nofollow"ターゲット= "_ blank"> mvcコンバーターを使用してディスクにアップロードされたdubbo画像を表示</a> </button> <button> <a href = "/downowname = dubbo.png&savename reav.png"> "png" png "png"> filename = dubbo.png&savename Diskにアップロードされたダボ画像をダウンロードするMVCコンバーター</a> </button> </div> </div> </body> </html>上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。