序文 一般的な開発では、画像をディレクトリにアップロードし、ディレクトリとファイル名を連結してデータベースに保存しますが、この方法は適切に行われないと特定の欠陥が発生する可能性があります。 プロジェクトを移転する場合、サーバー自体はまだ使用中であっても、サーバー上に保存されているプロジェクト関連の画像も移転する必要があり、同時にコードも修正する必要があり、非常に手間がかかります。画像を保存するための専用サーバーを構築し、FTP 経由で転送する場合は、コードを変更する必要はありません。 ここでは Docker と Nginx の紹介と利点については詳しく説明しません。インターネット上には多くのブログやチュートリアルがあります。 環境構築 環境構築の一部のモジュールは詳細が十分でない可能性があります。詳細を知りたい場合は、他の資料を確認してください。ここでは簡単な操作のみを説明します。 1. Dockerをインストールする
2. Nginxイメージを取得する
バージョン番号は 1.16.0 です。docker search nginx でイメージをクエリできます。tomcat、mysql などの他のイメージをプルする場合も同様です。 3. dockerマウント用のメインファイルを作成する
4. Nginxコンテナを作成して実行する docker run -d -p 80:80 -p 443:443 --name nginx-server -v /home/nginx/www:/usr/share/nginx/html -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/logs:/var/log/nginx nginx 5. ホスト上にNginx設定ファイルを作成する
ユーザー root; ワーカープロセス 1; error_log /var/log/nginx/error.log 警告; pid /var/run/nginx.pid; イベント { ワーカー接続 1024; } http { /etc/nginx/mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log メイン; ファイル送信オン; #tcp_nopush オン; キープアライブタイムアウト65; #gzip オン; /etc/nginx/conf.d/*.conf を含めます。 サーバー{ 443 ssl を聴く; server_name IP アドレスまたはドメイン名。 ルート /usr/share/nginx/html; ssl_certificate あなたのキー.pem; ssl_certificate_key あなたのキー.key; ssl_session_timeout 5分; ssl_session_cache 共有:SSL:1m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:aNULL:!MD5:!ADH:!RC4; ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers をオン; # ポート 8080 にジャンプします。これは私の Tomcat コンテナです。ブラウザに https://ip/ と入力すると、Tomcat コンテナ (すでに実行されており、ポート番号がマップされている) にジャンプします。 位置 / { ルート /usr/share/nginx/html; プロキシパス http://ip:8080/; インデックス index.html index.htm; } # ブラウザに https://ip/images/ と入力すると、これは以前にマウントされているため、ホストマシン上の /home/nginx/www/images/ に対応します。つまり、ホストマシン上のディレクトリと Docker コンテナ内のフォルダがデータを共有します。# まず、ホストマシン上の /home/nginx/www/ に images ディレクトリを作成します。場所 ~ /images/ { ルート /usr/share/nginx/html/; } } サーバー{ 聞く 80; server_name IP アドレスまたはドメイン名。 ^ https://$host$1 を永続的に書き換えます。 } } ここで SSL 設定があります。まずドメイン名を申請し、SSL 証明書を取得して設定する必要があります。ここでは詳細には触れません。 環境設定はほぼ完了です。次にvsftpdをインストールしてftpを構築します。 FTPの設定 vsftpdをインストールする
ユーザーの追加 useradd カスタムユーザー名 passwd カスタムパスワード 設定ファイルを変更する
変更が必要な箇所は以下のとおりです。
保存して終了した後にユーザーのアクセス権を設定する
テスト後、FTP 経由でアップロードすると、ブラウザの https リクエストを通じて次の結果が得られました。 *もう 1 つ: Alibaba Cloud サーバーの場合は、セキュリティ グループを構成し、ポート 21 とポート 443、80、30000 ~ 30009 を開くことを忘れないでください。 Java での FTP 転送の実装 まずリソースに
次にFTP送信用のツールクラスを作成します org.apache.commons.net.ftp.FTP をインポートします。 org.apache.commons.net.ftp.FTPClient をインポートします。 org.springframework.beans.factory.annotation.Value をインポートします。 org.springframework.context.annotation.PropertySource をインポートします。 org.springframework.stereotype.Component をインポートします。 java.io.* をインポートします。 /** * @著者マックス */ @成分 @PropertySource("クラスパス:ftpResource.properties") パブリッククラス FtpUtil { /** * FTP_ADDRESS: FTPサーバーのIPアドレス * FTP_PORT: FTPサーバーのポート、デフォルトは21 * FTP_USERNAME: FTP サーバーのユーザー名* FTP_PASSWORD: FTP サーバーのパスワード* FTP_BASE_PATH: 画像を保存する FTP サーバーの絶対パス* IMAGE_BASE_URL: インターネットから画像にアクセスするための FTP サーバーのパス*/ @Value("${FTP_ADDRESS}") プライベート文字列 FTP_ADDRESS; @Value("${FTP_PORT}") プライベート整数 FTP_PORT; @Value("${FTP_USERNAME}") プライベート文字列 FTP_USERNAME; @Value("${FTP_PASSWORD}") プライベート文字列 FTP_PASSWORD; @Value("${FTP_BASE_PATH}") プライベート文字列 FTP_BASE_PATH; @Value("${IMAGE_BASE_URL}") プライベート文字列 IMAGE_BASE_URL; /** * 画像をアップロード * @param inputStream 入力ストリーム * @param name ファイル名 * @return 画像のURL * @throws IOException IO例外 */ パブリック String uploadImage(InputStream inputStream、String name) は IOException をスローします { FTPクライアント ftpClient = 新しいFTPクライアント(); 試す { System.out.println(FTP_ADDRESS); ftpClient.enterLocalPassiveMode(); ftpClient.connect(FTP_ADDRESS、FTP_PORT); ftpClient.login(FTP_USERNAME、FTP_PASSWORD); ftpClient.changeWorkingDirectory(FTP_BASE_PATH); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ブール値 isSucceed = ftpClient.storeFile(name, inputStream); if (isSucceed){ IMAGE_BASE_URL + 名前を返します。 } }catch (例外 e){ e.printStackTrace(); }ついに { ftpClient.logout(); } IMAGE_BASE_URL + "エラー" を返します。 } } 次に、サービス処理ロジックでは、コードの一部のみがここに表示されます。 オートワイヤード プライベート FtpUtil ftpUtil; @オーバーライド パブリック int insertImg(MultipartFile ファイル) は IOException をスローします { /* 1. アップロードされたファイルストリーム inputStream とファイル名 getOriginalFilename を取得します。 2. FtpUtil の関数を呼び出して画像を画像サーバーにアップロードし、https アドレスを返します 3. 画像アドレスが返された場合は、それをデータベースに挿入します */ 入力ストリーム inputStream = file.getInputStream(); 文字列ファイル名 = file.getOriginalFilename(); 文字列 picUrl = ftpUtil.uploadImage(inputStream, ファイル名); } これで完了です。今後クライアントがリクエストしたときに、FTP 経由でサーバーに転送され、アドレスがデータベースに保存されます。フロントエンドが画像の URL を取得すれば、表示されます。 要約する これで、Docker で Nginx イメージ サーバーを構築する方法についての記事は終了です。Docker で Nginx イメージ サーバーを構築する方法についての詳細は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
この記事の例では、WeChatアプレットで画像コントロールを選択するための具体的なコードを参考までに...
ボックス モデルは、要素ボックスの幅と高さ、パディング、境界線、余白のサイズを指定します。境界線の内...
1. Javascript は前のページ history.go(-1) に戻り、2 つのページを返し...
[概要] この記事では、自作の Docker プラットフォームをベースに完全な ELK システムを素...
最近、webpackの使い方を学んでいたときに、webpack-replace-loaderの設定正...
言語では、DSL を実装するためにマクロがよく使用されます。マクロを使用すると、開発者は JSX 構...
1.Mysqlイメージを取得するdocker pull mysql:5.7 2. MySQLイメージ...
目次ビジネス要件:解決策 1: vuex-persistedstate解決策2: vuex-pers...
仮想DOMの役割まず、仮想 DOM の出現によってどのような問題が解決されるのかを知る必要があります...
一般的に使用される方法は次の 4 つです。 1.locate()メソッドを使用する一般的な使用法: ...
sshd SSH は Secure Shell の略で、アプリケーション層のセキュリティ プロトコル...
現象Apache Spark 2.x を使用すると、Spark ジョブがすべて完了しているにもかかわ...
前回の記事 https://www.jb51.net/article/154153.htm では、B...
この記事では、ユーザーのログイン切り替えを実現するためのVueの具体的なコードを例として紹介します。...
ここ数日、ウェブサイトを初めて開いたときにアクセスが非常に遅いのですが、その後はページが正常に開きま...