絵中および後springbootにまたは正常にアップロードが、アクセスすることができないファイルをアップロードします。
springbootでは、相対パスを持つ店が、それは一時的なディレクトリに格納されている、ファイルが再起動する必要はありません。そして瓶のためにプレーした後、保存されたファイルも問題です。
このケースでは、物理パスにマップされた仮想パスを設定する必要があります。// localhostを:8080 /イメージたとえば、マップされたファイルサーバはhttpと同時に、パス/ usr /アップロードフォルダが存在します。/ usr /アップロードフォルダへのアクセスをxxx.pngに相当8080 /画像/ xxx.png、:そして、アップロードされたファイル・デーモンを処理すると、ブラウザのlocalhostを介してアクセス可能なファイルは/ usr /アップロードフォルダの下に書かれています。
具体的な実装手順 - 」
参考ブログTinyMCEのエディタを使用して、フロントガーデンを使用。絵を貼り付け、アップロードすることができます。
代わりに、非同期形式を使用するので、私たちは、アップロードツールについては説明しません。
バックエンドでは、アップロードハンドラのプロセス:
パッケージcom.hj.blog.handler。 輸入com.hj.blog.service.UploadService。 輸入org.slf4j.Logger。 輸入org.slf4j.LoggerFactory; 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.web.bind.annotation.RequestMapping。 輸入org.springframework.web.bind.annotation.RestController。 輸入javax.servlet.ServletException; インポートのjavax.servlet.http.HttpServletRequest; 輸入 java.io. * ; @RestController パブリック クラスUploadHandler { プライベートLoggerFactory.getLoggerロガー=ロガー(UploadHandler。クラス); @Autowired プライベートUploadService uploadService; RequestMapping(@ "/ uploadimg" ) 公共の文字列uploadimg(HttpServletRequestのリクエスト)スローにIOExceptionが、ServletExceptionがが{ // ハンドラは、ファイルアップロードサービスを呼び出すには、仮想ファイルを取得しますパス 文字列のファイルパス= uploadService.uploadImg(要求); 返すファイルパス; } }
ファイルアップロードサービスを取り扱い、サービスのアップロードフォルダとフォルダ内の構成ファイルにマップされます。
パッケージcom.hj.blog.service。 輸入org.slf4j.Logger。 輸入org.slf4j.LoggerFactory; 輸入org.springframework.beans.factory.annotation.Value。 輸入org.springframework.stereotype.Service。 輸入javax.servlet.ServletException; インポートのjavax.servlet.http.HttpServletRequest; 輸入 java.io. * ; 輸入java.text.SimpleDateFormatの。 輸入 java.utilの。* ; @Service パブリック クラスUploadService { プライベートロガーロガー= LoggerFactory.getLogger(UploadService。クラス)。 // 実際のパス @value( "file.uploadFolder $ {}" ) プライベート文字列realBasePath; @value( "file.accessPath $ {}" ) プライベート文字列AccessPath; パブリック文字列uploadImg(HttpServletRequestのリクエスト)がスローにIOException、ServletExceptionがが{ InputStream InputStreamは = request.getInputStream(); //はContect型のリクエストヘッダの値を取得 // 画像接尾 文字imgSuffix = "PNG" ; 列挙列挙 = request.getHeaderNamesを(); 一方(enumeration.hasMoreElements()){ 文字列名 =(文字列)enumeration.nextElement(); もし(name.equals( "コンテンツタイプ" )){ String値 = request.getHeader(名); imgSuffix = value.split( "/")[1 ]。 logger.info( "ヘッダ中" +名+ "" + 値)。 logger.info( "文件后缀:" + imgSuffix)。 } } // 文件唯一的名字 列fileNameに= UUID.randomUUID()のtoString()+ "" + imgSuffix; 日付todayDate = 新しい日付(); SimpleDateFormatのDATEFORMAT = 新しいですSimpleDateFormat( "YYYY-MM-DD" ); 文字列今日 = dateFormat.format(todayDate); // 相対パスドメイン名(ブラウザを介してアクセスリンク-仮想パス)にアクセスするための 文字列saveToPath AccessPath +今日+ = "/"を; // 真のパス、パス、実際に保存された 文字列=のrealpath realBasePath +今日+「/」; // 物理ファイル・ストレージ・パス、ローカルストレージ・パスの使用して 文字列のファイルパス=実パス+ ファイル名を、 logger.infoは(「というタイトルの写真をアップロードします。」 + fileNameに+「 -仮想ファイルパス:」+ saveToPath +「 -物理ファイルパス:」+ 実パス); // 対応するフォルダがかどうかを判断 destFile =ファイルの新しい新しいもし(!ファイル(ファイルパス); destFile.getParentFile()は())が存在する{。 DestFile.getParentFile()mkdirs();. } // へ出力ストリームファイル のOutputStreamのOutputStream = 新しい新たFileOutputStream(destFile); // バッファのバイト [] = BS 新しい新しいバイト [1024 ]; int型 LEN = -1 ; ながら(!(LEN = InputStream.read(BS))= -1 ){ OutputStream.write(BS、 0 、LEN); } inputStream.close()。 outputStream.closeは(); // 訪問するリンクする仮想パスを返します。 返す saveToPath + ファイル名を。 } }
application.properties:
#サーバー上のマップファイルアップロード
file.accessPath = / uploadimg /
#静的リソースへの外部被ばくのアクセスパス
file.staticAccessPath = / uploadimg / **
#ファイルアップロードディレクトリ(LinuxおよびWindows上の異なるディレクトリ構造を注意してください)
#FILEを= .uploadFolder /ルート/ UploadFiles /
file.uploadFolder = C:// File_rec / TMP /
キーコンフィグレーションクラス:
パッケージcom.hj.blog.config。 輸入org.springframework.beans.factory.annotation.Value。 輸入org.springframework.context.annotation.Configuration。 輸入org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry。 輸入org.springframework.web.servlet.config.annotation.WebMvcConfigurer。 / ** *设置虚拟路径、访问绝对路径下资源 * / @Configuration パブリック クラス UploadConfigは実装WebMvcConfigurer { @valueを( "$ {file.staticAccessPath}" ) プライベート文字列staticAccessPath。 @value( "$ {file.uploadFolder}") プライベート文字列uploadFolder。 @Override 公共 のボイドaddResourceHandlers(ResourceHandlerRegistryレジストリ){ registry.addResourceHandler(staticAccessPath).addResourceLocations( "ファイル:" + uploadFolder)。 } }
最終的な構成クラスにより、物理パスへの仮想パスを設定します。また、通常のアクセス写真することができます。