Netty+SpringBoot+FastDFS+Html 5チャットApp詳細(二)
Netty+SpringBoot+FastDFS+Html 5実現チャットアプリ、プロジェクト紹介.Netty+SpringBoot+FastDFS+Html 5はチャットアプリ、プロジェクトgithubリンクを実現します.この章の完全なコード本節では、主にチャットアプリPigChatにおけるユーザー情報処理、およびファイルサーバFastDFSに関する操作について説明します.次の内容が含まれます.
(1)登録と登録機能
(2)ファイルサーバの構成
(3)ユーザアバターのアップロード
(4)ユーザニックネームの設定
(5)ユーザQRコードの生成とアップロード
登録とログイン機能
ツールクラスIMoocJSOnResultをカスタマイズし、バックエンド応答フロントエンドのデータ構造です.次の3つのプロパティがあります.
エラー・レスポンスと通常のレスポンスの方法を提供します.
データベースが構築したテーブルに基づいて対応するpojoパケットとmapperパケットを作成し、データベース構築テーブルの詳細
UserControllerメソッドを作成し、ログイン処理に登録するregistOrLoginインタフェースを書き込みます.【0】フロントエンドがUsersオブジェクトに入力され、まず、フロントエンドが入力したUsersオブジェクトが空であるか否かを判断する.次に、userServiceのqueryUsernameIsExistメソッドを使用して、入力されたユーザ名に基づいてデータベース内でクエリーを行います.【1.1】当該ユーザが存在する場合はログインを行い、userServiceのqueryUserForLoginメソッドによりフロントエンドからのユーザ名がパスワード試行と一致していると判断し、一致する場合はログインに成功し、そうでない場合はログインに失敗する.【1.2】当該ユーザが存在しない場合は記憶的に登録し、フロントエンドからの情報に基づいてUsersオブジェクトを構築し、userServiceのsaveUserによりデータベースに保存する.【2】最後にUsersVOオブジェクトを構築し、フロントエンドに戻る.注:パスワードはMD 5ツールクラスを使用して暗号化してからデータベースに保存する必要があります.
ファイルサーバの構成
linuxでファイルサーバFastDFSを構成した後、プロジェクトに次の構成を追加する必要があります.
(1)Application同ディレクトリでFastdfsImporterを作成する
(2)アプリケーション.propertiesには、次の構成が追加されています.
サービスコマンドを開始するには、次の手順に従います.
ユーザーのアイコンをアップロード
UserControllerにアップロードするuploadFaceBase 64インタフェースを追加します.
【1】フロントエンドがUserBOオブジェクトに転送され、まずフロントエンドからのbase 64文字列を取得し、ファイルツールクラスFileUtilsのbase 64 ToFileメソッドによりファイルオブジェクトに変換してローカルに保存する.【2】ファイルオブジェクトをMultipartFileに変換し、fastDFSclientのuploadBase 64メソッドによりファイルサーバfastDFSにアップロードし、サーバが返すパスを印刷し、このパスでこの画像にアクセスできます.戻る経路をカットしてサムネイルの経路を得る.【4】データベース内のユーザアバター情報を更新する.
ユーザーニックネームの設定
ユーザーのニックネームを設定するsetNicknameインタフェースをUserControllerに追加します.
ユーザーのQRコードの生成とアップロード
UserServiceImplに関連するツールクラスとコンポーネントを導入する
UserServiceImplでユーザー情報を保存するsaveUserメソッドでは、ユーザーごとに一意のQRコードを生成する必要があります.
【1】QRコードツールクラスqrCodeUtilsのcreateQRCodeメソッドにより、ユーザごとに一意のQRコードを生成し、最初のパラメータは生成されたQRコードが格納されたパスであり、2番目のパラメータはQRコードに保存された情報であり、その後、ファイルをMultipartFileオブジェクトに転送し、アップロード操作を容易にする.【2】fastDFSclientのuploadQRCode法により、QRコード画像をファイルサーバにアップロードする.
(1)登録と登録機能
(2)ファイルサーバの構成
(3)ユーザアバターのアップロード
(4)ユーザニックネームの設定
(5)ユーザQRコードの生成とアップロード
登録とログイン機能
ツールクラスIMoocJSOnResultをカスタマイズし、バックエンド応答フロントエンドのデータ構造です.次の3つのプロパティがあります.
//
private Integer status;
//
private String msg;
//
private Object data;
エラー・レスポンスと通常のレスポンスの方法を提供します.
public static IMoocJSONResult ok(Object data) {
return new IMoocJSONResult(data);
}
public static IMoocJSONResult ok() {
return new IMoocJSONResult(null);
}
public static IMoocJSONResult errorMsg(String msg) {
return new IMoocJSONResult(500, msg, null);
}
public static IMoocJSONResult errorMap(Object data) {
return new IMoocJSONResult(501, "error", data);
}
public static IMoocJSONResult errorTokenMsg(String msg) {
return new IMoocJSONResult(502, msg, null);
}
public static IMoocJSONResult errorException(String msg) {
return new IMoocJSONResult(555, msg, null);
}
データベースが構築したテーブルに基づいて対応するpojoパケットとmapperパケットを作成し、データベース構築テーブルの詳細
UserControllerメソッドを作成し、ログイン処理に登録するregistOrLoginインタフェースを書き込みます.【0】フロントエンドがUsersオブジェクトに入力され、まず、フロントエンドが入力したUsersオブジェクトが空であるか否かを判断する.次に、userServiceのqueryUsernameIsExistメソッドを使用して、入力されたユーザ名に基づいてデータベース内でクエリーを行います.【1.1】当該ユーザが存在する場合はログインを行い、userServiceのqueryUserForLoginメソッドによりフロントエンドからのユーザ名がパスワード試行と一致していると判断し、一致する場合はログインに成功し、そうでない場合はログインに失敗する.【1.2】当該ユーザが存在しない場合は記憶的に登録し、フロントエンドからの情報に基づいてUsersオブジェクトを構築し、userServiceのsaveUserによりデータベースに保存する.【2】最後にUsersVOオブジェクトを構築し、フロントエンドに戻る.注:パスワードはMD 5ツールクラスを使用して暗号化してからデータベースに保存する必要があります.
/**
* @Description: /
*/
@PostMapping("/registOrLogin")
public IMoocJSONResult registOrLogin(@RequestBody Users user) throws Exception {
// 0.
if (StringUtils.isBlank(user.getUsername())
|| StringUtils.isBlank(user.getPassword())) {
return IMoocJSONResult.errorMsg(" ...");
}
// 1. , ,
boolean usernameIsExist = userService.queryUsernameIsExist(user.getUsername());
Users userResult = null;
if (usernameIsExist) {
// 1.1
userResult = userService.queryUserForLogin(user.getUsername(),
MD5Utils.getMD5Str(user.getPassword()));
if (userResult == null) {
return IMoocJSONResult.errorMsg(" ...");
}
} else {
// 1.2
user.setNickname(user.getUsername());
user.setFaceImage("");
user.setFaceImageBig("");
user.setPassword(MD5Utils.getMD5Str(user.getPassword()));
userResult = userService.saveUser(user);
}
// 2. UsersVO
UsersVO userVO = new UsersVO();
BeanUtils.copyProperties(userResult, userVO);
return IMoocJSONResult.ok(userVO);
}
ファイルサーバの構成
linuxでファイルサーバFastDFSを構成した後、プロジェクトに次の構成を追加する必要があります.
(1)Application同ディレクトリでFastdfsImporterを作成する
package com.imooc;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableMBeanExport;
import org.springframework.context.annotation.Import;
import org.springframework.jmx.support.RegistrationPolicy;
import com.github.tobato.fastdfs.FdfsClientConfig;
/**
* FastDFS-Client
*
* @author tobato
*
*/
@Configuration
@Import(FdfsClientConfig.class)
// jmx bean
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class FastdfsImporter {
//
}
(2)アプリケーション.propertiesには、次の構成が追加されています.
fdfs.soTimeout=1501
fdfs.connectTimeout=601
fdfs.thumbImage.width=80
fdfs.thumbImage.height=80
# 192.168.1.70 Linux ip
fdfs.trackerList[0]=192.168.1.70:22122
サービスコマンドを開始するには、次の手順に従います.
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
# (23000/22122 )
netstat -lnp |grep fdfs
cd /usr/local/nginx/sbin
./nginx
ユーザーのアイコンをアップロード
UserControllerにアップロードするuploadFaceBase 64インタフェースを追加します.
【1】フロントエンドがUserBOオブジェクトに転送され、まずフロントエンドからのbase 64文字列を取得し、ファイルツールクラスFileUtilsのbase 64 ToFileメソッドによりファイルオブジェクトに変換してローカルに保存する.【2】ファイルオブジェクトをMultipartFileに変換し、fastDFSclientのuploadBase 64メソッドによりファイルサーバfastDFSにアップロードし、サーバが返すパスを印刷し、このパスでこの画像にアクセスできます.戻る経路をカットしてサムネイルの経路を得る.【4】データベース内のユーザアバター情報を更新する.
/**
* @Description:
*/
@PostMapping("/uploadFaceBase64")
public IMoocJSONResult uploadFaceBase64(@RequestBody UsersBO userBO) throws Exception {
// 1. base64 ,
String base64Data = userBO.getFaceData();
//
String userFacePath = "C:\\" + userBO.getUserId() + "userface64.png";
FileUtils.base64ToFile(userFacePath, base64Data);
// 2. fastdfs
MultipartFile faceFile = FileUtils.fileToMultipart(userFacePath);
String url = fastDFSClient.uploadBase64(faceFile);
System.out.println(url);
// "dhawuidhwaiuh3u89u98432.png"
// "dhawuidhwaiuh3u89u98432_80x80.png"
// 3. url
String thump = "_80x80.";
String arr[] = url.split("\\.");
String thumpImgUrl = arr[0] + thump + arr[1];
// 4.
Users user = new Users();
user.setId(userBO.getUserId());
user.setFaceImage(thumpImgUrl);
user.setFaceImageBig(url);
Users result = userService.updateUserInfo(user);
return IMoocJSONResult.ok(result);
}
ユーザーニックネームの設定
ユーザーのニックネームを設定するsetNicknameインタフェースをUserControllerに追加します.
/**
* @Description:
*/
@PostMapping("/setNickname")
public IMoocJSONResult setNickname(@RequestBody UsersBO userBO) throws Exception {
Users user = new Users();
user.setId(userBO.getUserId());
user.setNickname(userBO.getNickname());
Users result = userService.updateUserInfo(user);
return IMoocJSONResult.ok(result);
}
ユーザーのQRコードの生成とアップロード
UserServiceImplに関連するツールクラスとコンポーネントを導入する
//
@Autowired
private QRCodeUtils qrCodeUtils;
// fsatDFS
@Autowired
private FastDFSClient fastDFSClient;
UserServiceImplでユーザー情報を保存するsaveUserメソッドでは、ユーザーごとに一意のQRコードを生成する必要があります.
【1】QRコードツールクラスqrCodeUtilsのcreateQRCodeメソッドにより、ユーザごとに一意のQRコードを生成し、最初のパラメータは生成されたQRコードが格納されたパスであり、2番目のパラメータはQRコードに保存された情報であり、その後、ファイルをMultipartFileオブジェクトに転送し、アップロード操作を容易にする.【2】fastDFSclientのuploadQRCode法により、QRコード画像をファイルサーバにアップロードする.
@Transactional(propagation = Propagation.REQUIRED)
@Override
public Users saveUser(Users user) {
// id
String userId = sid.nextShort();
// 1.
//
String qrCodePath = "C://user" + userId + "qrcode.png";
// :zhuzhu_qrcode:[username]
qrCodeUtils.createQRCode(qrCodePath, "zhuzhu_qrcode:" + user.getUsername());
MultipartFile qrCodeFile = FileUtils.fileToMultipart(qrCodePath);
//2.
String qrCodeUrl = "";
try {
qrCodeUrl = fastDFSClient.uploadQRCode(qrCodeFile);
} catch (IOException e) {
e.printStackTrace();
}
user.setQrcode(qrCodeUrl);
user.setId(userId);
userMapper.insert(user);
return user;
}