最近、画像、ビデオ、CSS/JS などの静的リソースを配置するために nginx を使用する方法を学習しています。以下に学習のヒントをいくつか記録しておきます。 1. nginxのインストールと設定 エディターが使用するサーバーは Alibaba Cloud の軽量アプリケーションサーバーであり、システムは Ubuntu を使用しています。 TCP ポート 9090 を必ず開いてください。ポート 9090 をサーバー ポートとして使用しない場合は、開く必要はありません。 インストール まず、インストールパッケージを入手する必要があります。こちらはnginx-1.11.3-ubuntu.tar.gzです。https://pan.baidu.com/s/1vvb41QkOJ4VqfyFckXBkjA (パスワード45wz) エディターはインストールパッケージを/usr/nginxに置き、ディレクトリに入り、 構成 /usr/nginx/conf/nginx.conf を変更します。 サーバー{ 9090を聴く; server_name ローカルホスト; location ~ .(jpg|png|jpeg|gif|bmp)$ { #認識可能なファイルサフィックス root /usr/nginx/image/; #イメージマッピングパス autoindex on; #自動インデックスを有効にする expires 1h; #有効期限} 場所 ~ .(css|js)$ { ルート /usr/nginx/static/; 自動インデックスオン; 1時間で期限切れになります。 } 場所 ~ .(AVI|mov|rmvb|rm|FLV|mp4|3GP)$ { ルート /usr/nginx/video/; 自動インデックスオン; 1時間で期限切れになります。 } 変更が必要なものは変更し、追加が必要なものは追加し、無作為に削除しないように注意してください 最後のステップは、nginxを起動して./usr/nginx/sbin/nginxを実行することです。 この時点で、nginxサーバーは準備完了です イメージ 01.jpg を /usr/nginx/image に配置し、ローカルで http://ip:9090/01.jpg にアクセスして、イメージにアクセスできるかどうかを確認できます。 2. SpringBootはリソースのアップロードを実装する ドキュメント: <親> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <バージョン>2.1.7.RELEASE</バージョン> </親> <依存関係> <依存関係> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <バージョン>2.1.7.RELEASE</バージョン> </依存関係> <依存関係> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <バージョン>2.1.7.RELEASE</バージョン> <scope>テスト</scope> </依存関係> <!-- Apache ツールキット --> <依存関係> <グループ ID>org.apache.commons</グループ ID> <artifactId>コモンズ-lang3</artifactId> <バージョン>3.8.1</バージョン> </依存関係> <依存関係> <グループ ID>org.apache.commons</グループ ID> <artifactId>コモンズ io</artifactId> <バージョン>1.3.2</バージョン> </依存関係> <依存関係> <groupId>コモンズネット</groupId> <artifactId>コモンズネット</artifactId> <バージョン>3.6</バージョン> </依存関係> <!-- ファイルアップロードコンポーネント--> <依存関係> <groupId>コモンズファイルアップロード</groupId> <artifactId>コモンズファイルアップロード</artifactId> <バージョン>1.3.3</バージョン> </依存関係> <依存関係> <groupId>org.projectlombok</groupId> <artifactId>ロンボク</artifactId> <バージョン>1.16.22</バージョン> </依存関係> <依存関係> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <バージョン>0.1.54</バージョン> </依存関係> <依存関係> <groupId>ジョダタイム</groupId> <artifactId>joda-time</artifactId> <バージョン>2.10.3</バージョン> </依存関係> </依存関係> アプリケーション.yml: ftp: ホスト: あなた自身のサーバーのIP ユーザー名: サーバーアカウント パスワード: サーバーパスワード ポート: 22 ルートパス: /usr/nginx/image 画像: url: http://ip:9090/ # ftp.img.url は省略できます。ファイルが正常にアップロードされた後にファイル パスを返すためにのみ使用されます。 ツールクラス FtpUtil.class: com.jcraft.jsch.* をインポートします。 org.slf4j.Logger をインポートします。 org.slf4j.LoggerFactory をインポートします。 org.springframework.beans.factory.annotation.Value をインポートします。 org.springframework.stereotype.Component をインポートします。 java.io.InputStream をインポートします。 java.util.Properties をインポートします。 @成分 パブリッククラス FtpUtil { プライベート静的 Logger ロガー = LoggerFactory.getLogger(FtpUtil.class); /** * FTPサーバーのIPアドレス */ プライベート静的文字列ホスト; @Value("${ftp.host}") パブリックvoid setHost(String val){ FtpUtil.host = val; } /** * ポート */ プライベート静的 int ポート; @Value("${ftp.port}") パブリックvoid setPort(int val){ FtpUtil.port = val; } /** * ユーザー名*/ プライベート静的文字列ユーザー名; @Value("${ftp.userName}") パブリックvoid setUserName(String val){ FtpUtil.userName = val; } /** * パスワード*/ プライベート静的文字列パスワード; @Value("${ftp.password}") パブリックvoid setPassword(String val){ FtpUtil.password = val; } /** * 画像が保存されるルートディレクトリ */ プライベート静的文字列 rootPath; @Value("${ftp.rootPath}") パブリックvoid setRootPath(String val){ FtpUtil.rootPath = val; } /** * 画像を保存するパス */ プライベート静的文字列 imgUrl; @Value("${ftp.img.url}") パブリックvoid setImgUrl(String val){ FtpUtil.imgUrl = val; } /** * 接続を取得 */ プライベート静的ChannelSftp getChannel()は例外をスローします{ JSch jsch = 新しい JSch(); //->ssh ルート@ホスト:ポート セッション sshSession = jsch.getSession(userName,host,port); //パスワード sshSession.setPassword(password); プロパティ sshConfig = new Properties(); sshConfig.put("StrictHostKeyChecking", "no"); sshSession.setConfig(sshConfig); sshSession.connect(); チャネル channel = sshSession.openChannel("sftp"); チャネルを接続します。 (ChannelSftp) チャネルを返します。 } /** * FTP アップロード画像 * @param inputStream 画像 io ストリーム * @param imagePath パス、存在しない場合はディレクトリを作成 * @param imagesName 画像名 * @return urlStr 画像保存パス */ パブリック静的文字列 putImages(InputStream inputStream、文字列 imagePath、文字列 imagesName){ 試す { チャネルSftp sftp = getChannel(); 文字列パス = rootPath + imagePath + "/"; createDir(パス、sftp); // ファイルをアップロード sftp.put(inputStream, path + imagesName); logger.info("アップロードに成功しました!"); sftp.quit(); sftp を終了します。 //返されたパスを処理する String resultFile; 結果ファイル = imgUrl + 画像パス + 画像名; 結果ファイルを返します。 } キャッチ (例外 e) { logger.error("アップロードに失敗しました: " + e.getMessage()); } 戻る ""; } /** * ディレクトリを作成する */ プライベート静的void createDir(String path,ChannelSftp sftp)はSftpExceptionをスローします{ 文字列[] フォルダー = path.split("/"); sftp.cd("/"); for ( 文字列 フォルダ : フォルダ ) { フォルダの長さ() > 0 の場合 試す { sftp.cd( フォルダー ); }catch (SftpException e) { sftp.mkdir( フォルダー ); sftp.cd( フォルダー ); } } } } /** * 画像を削除 */ パブリック静的 void delImages(String imagesName){ 試す { チャネルSftp sftp = getChannel(); 文字列パス = rootPath + imagesName; sftp.rm(パス); sftp.quit(); sftp を終了します。 } キャッチ (例外 e) { e.printStackTrace(); } } } ツールクラス IDUtils.class (アップロードされた画像名を変更します): java.util.Random をインポートします。 パブリッククラスIDUtils { /** * ランダムな画像名を生成します */ パブリック静的文字列genImageName() { // ミリ秒を含む現在の時刻の長整数値を取得します。long millis = System.currentTimeMillis(); // 3 つの乱数を追加します。Random random = new Random(); ランダムなnextInt(999) //3桁未満の場合は先頭に0を追加します 文字列 str = millis + String.format("%03d", end3); str を返します。 } } NginxService.クラス: com.wzy.util.FtpUtil をインポートします。 com.wzy.util.IDUtils をインポートします。 lombok.extern.slf4j.Slf4j をインポートします。 org.joda.time.DateTime をインポートします。 org.springframework.stereotype.Service をインポートします。 org.springframework.web.multipart.MultipartFile をインポートします。 java.io.IOException をインポートします。 java.io.InputStream をインポートします。 /** * @パッケージ: com.wzy.service * @著者: Clarence1 * @日付: 2019/10/4 21:34 */ @サービス 翻訳者 パブリッククラスNginxService { パブリックオブジェクトアップロードピクチャ(マルチパートファイルアップロードファイル) { //1. アップロードされた画像の新しいファイル名を生成します //1.1 元のファイル名を取得します String oldName = uploadFile.getOriginalFilename(); //1.2 IDUtils ツール クラスを使用して新しいファイル名を生成します。新しいファイル名 = newName + ファイル サフィックス String newName = IDUtils.genImageName(); oldName != null であると主張します。 新しい名前 = 新しい名前 + 古い名前.substring(古い名前.lastIndexOf(".")); //1.3 サーバー上にファイルを保存するためのサブディレクトリを生成します。String filePath = new DateTime().toString("/yyyyMMdd/"); //2. イメージをイメージサーバーにアップロードします //2.1 アップロードされた io ストリームを取得します InputStream input = null; 試す { 入力 = uploadFile.getInputStream(); } キャッチ (IOException e) { e.printStackTrace(); } //2.2 アップロードするには FtpUtil ツール クラスを呼び出します。 return FtpUtil.putImages(input, filePath, newName); } } NginxController.クラス: com.fasterxml.jackson.core.JsonProcessingException をインポートします。 com.fasterxml.jackson.databind.ObjectMapper をインポートします。 com.wzy.service.NginxService をインポートします。 lombok.extern.slf4j.Slf4j をインポートします。 org.springframework.beans.factory.annotation.Autowired をインポートします。 org.springframework.web.bind.annotation.PostMapping をインポートします。 org.springframework.web.bind.annotation.RequestParam をインポートします。 org.springframework.web.bind.annotation.RestController をインポートします。 org.springframework.web.multipart.MultipartFile をインポートします。 java.util.HashMap をインポートします。 java.util.Map をインポートします。 @レストコントローラ 翻訳者 パブリッククラスNginxController { オートワイヤード プライベート NginxService nginxService; /** * 写真や動画をアップロードできます。nginx 設定で認識可能なサフィックスを設定するだけです*/ @PostMapping("/アップロード") パブリック文字列 pictureUpload(@RequestParam(値 = "file") MultipartFile uploadFile) { 長いbegin = System.currentTimeMillis(); 文字列 json = ""; 試す { オブジェクト結果 = nginxService.uploadPicture(uploadFile); json = 新しい ObjectMapper().writeValueAsString(結果); } キャッチ (JsonProcessingException e) { e.printStackTrace(); } 長い終了 = System.currentTimeMillis(); log.info("タスクが完了しました。消費された合計時間: [" + (end-begin) + "] ミリ秒"); json を返します。 } @PostMapping("/アップロード") パブリックオブジェクト picturesUpload(@RequestParam(値 = "file") MultipartFile[] uploadFile) { 長いbegin = System.currentTimeMillis(); マップ<Object, Object> map = new HashMap<>(10); 整数カウント = 0; for (MultipartFile ファイル: uploadFile) { オブジェクト結果 = nginxService.uploadPicture(file); map.put(count, 結果); カウント++; } 長い終了 = System.currentTimeMillis(); log.info("タスクが完了しました。消費された合計時間: [" + (end-begin) + "] ミリ秒"); マップを返します。 } } プロジェクトを開始する、Postmanアーティファクト 知らせ: 1. ビデオと写真を一緒にアップロードする場合は、nginx.conf 構成ファイルを変更し、対応するビデオ サフィックスを追加するだけです。コードは変更されず、アップロード後に /usr/image にも配置されます。そうしないと、ファイルはアップロードできますが、アクセスできません。 2. 上記のコードのアップロードインターフェースは複数のファイルをアップロードするために使用されます ソースコードのダウンロード 要約する 上記は、編集者が紹介した SpringBoot+nginx リソースアップロード機能です。皆様のお役に立てれば幸いです。ご質問がございましたら、メッセージを残していただければ、編集者がすぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
問題の説明Tencent Cloud CentOS7にnginxをインストールするsudo yum ...
目次スロークエリログとは何ですか?スロークエリを有効にする方法ログ分析ツール mysqldumpsh...
オフセットOffset はオフセットです。関連プロパティの offset シリーズを使用すると、次の...
目次質問1: 小道具は具体的にどのように使用されますか?原理は何ですか?下を見る質問 2: 年齢に ...
目次非同期とは何ですか?なぜ非同期性が必要なのでしょうか?非同期IOとは何ですか?イベントループとは...
この記事では、jQueryタグセレクターアプリケーションの具体的なコードを例として紹介します。具体的...
目次vueカスタムディレクティブグローバル指令ローカル指示使用フック関数(両方ともオプション)使用方...
目次1. データベースの使用を選択2. 情報を表示する3. テーブルを作成する4. データを挿入する...
1. アイデアMySQL に 1,000,000 件のレコードを挿入するのにたった 6 秒しかかかり...
この記事では、ネイティブ JS で実装された均一なモーションを紹介します。その効果は次のとおりです。...
1. 場所の正規表現例を見てみましょう: 場所 = / { # 完全一致 / 、ホスト名の後に文字列...
目次1. はじめに1. インデックスとは何ですか? 2. インデックスはなぜ必要なのでしょうか? 2...
序文世界最高の Web サーバーの 1 つである Nginx の利点は明らかです。 Nginx がリ...
この記事では、アニメーション効果の非表示と表示を実現するためのJQueryの具体的なコードを参考まで...
この記事の例では、JavaScriptで等速アニメーションを実装するための具体的なコードを参考までに...