【Springboot] springbootアップロードされた画像ではないアクセス、(バックエンド)解決するために仮想パスを設定することができ

絵中および後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)。
    } 
}

 

最終的な構成クラスにより、物理パスへの仮想パスを設定します。また、通常のアクセス写真することができます。

 

おすすめ

転載: www.cnblogs.com/to-red/p/11425770.html