Qt+go-Fastdfs 仿百度云盘开发笔记(一)

本文章主要讲解仿百度云盘功能存储的一个开发笔记:

  1. 基于Nginx作为反向代理和轻量级web服务器
  2. 客户端使用Qt搭建,后台应用使用Go-Gin框架开发。
  3. 分布式解决方案用Go-Fastdfs,简介和安装部署可参考Go-Fastdfs安装部署
  4. 数据存储使用mysql和redis进行缓存。

注册和登录功能模块设计

注册:

 注册过程中的用户重要信息(如密码)不应该明文保存到数据库,所有我们通过MD5加密后再保存到数据库中。

 登录:

登录流程中是使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:

  1. 客户端使用用户名跟密码请求登录
  2. 服务端收到请求,去验证用户名与密码
  3. 验证成功后,服务端生成一个 Token,这个Token可以存储在内存、磁盘、或者数据库里,再把这个 Token 发送给客户端
  4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage
  5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token

 客户端的实现

 登录和注册窗口我们使用QT中的StackedWidget容器来实现:

       commom类主要实现配置文件读取和一些通用的工具

#ifndef COMMON_H
#define COMMON_H

#include <QDebug>
#define cout qDebug() << "[ " << __FILE__ << ":"  << __LINE__ << " ] " //没有分号

#include <QWidget>
#include <QString>
#include <QListWidgetItem>

//文件信息
struct FileInfo
{
    QString md5;        //文件md5码
    QString filename;   //文件名字
    QString user;       //用户
    QString time;       //上传时间
    QString url;        //url
    QString type;       //文件类型
    qint64 size;        //文件大小
    int shareStatus;    //是否共享, 1共享, 0不共享
    int pv;             //下载量
    QListWidgetItem *item; //list widget 的item
};

//窗口在屏幕中央显示
void moveToCenter(QWidget *tmp);

//从配置文件中得到相对应的参数
QString getCfgValue(QString title, QString key, QString path="../conf/cfg.json");

//通过读取文件, 得到文件类型, 存放在typeList
void getFileTypeList();

//得到文件后缀,参数为文件类型,函数内部判断是否有此类型,如果有,使用此类型,没有,使用other.png
QString getFileType(QString type);

//登录信息,登陆信息需要加密后,才写入配置文件
void writeLoginInfo(QString user, QString pwd, bool isRemeber, QString path="../conf/cfg.json");

//服务器信息,写入配置文件
void writeWebInfo(QString ip, QString port, QString path="../conf/cfg.json");

//获取某个文件的md5码
QString getFileMd5(QString filePath);

//将某个字符串加密成md5码
QString getStrMd5(QString str = "");

//产生分隔线
QString getBoundary();

//得到服务器回复的状态码, 返回值为 "000", 或 "001"
QString getCode(QByteArray json);

//传输数据记录到本地文件,user:操作用户,name:操作的文件, code: 操作码, path: 文件保存的路径
void writeRecord(QString user, QString name, QString code, QString path="../conf/record/");

#endif // COMMON_H

loginwidget实现登录窗体

#ifndef LOGINWIDGET_H
#define LOGINWIDGET_H

#include <QWidget>
#include <QPaintEvent>
#include <QPoint>
#include <QMouseEvent>
#include <QNetworkAccessManager>
#include "mainwidget.h"

namespace Ui {
class LoginWidget;
}

class LoginWidget : public QWidget
{
    Q_OBJECT

public:
    explicit LoginWidget(QWidget *parent = 0);
    ~LoginWidget();
protected:
    void paintEvent(QPaintEvent *);         //绘图事件,画背景图
    void mousePressEvent(QMouseEvent *e);   //鼠标点击,获取点击坐标,处理移动
    void mouseMoveEvent(QMouseEvent *e);    //鼠标移动,移动窗口
private slots:
    void on_closeButton_clicked();

private:
    Ui::LoginWidget *ui;
    QPoint p; //处理窗口移动需要使用到的坐标
    //读取配置信息,设置默认登录状态,默认设置信息
    void readCfg();
    QNetworkAccessManager *manager;
    MainWidget *mainWidget;//主界面,显示用户文件列表
};

#endif // LOGINWIDGET_H

 代码链接:Qt+go-Fastdfs仿百度云盘开发笔记代码一,试用Qt实现登录和注册功能-QT文档类资源-CSDN下载 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
go-fastdfs是一个开源的分布式文件系统,被广泛应用于大规模文件存储和传输的场景中。然而,就像其他软件一样,go-fastdfs也存在一些潜在的漏洞。 首先,由于go-fastdfs的设计初衷是快速的文件上传和下载,因此可能在安全性方面存在一些弱点。例如,由于缺乏严格的访问控制机制,未经授权的用户可能能够访问和下载存储在go-fastdfs上的文件。这可能导致敏感信息泄露的风险。 其次,go-fastdfs的文件上传功能可能存在文件类型验证不严格的问题。攻击者可以通过伪装文件类型来上传恶意文件,从而危害系统安全。例如,攻击者可以将具有恶意程序的文件伪装成图片进行上传,一旦用户下载并打开这些文件,就可能被恶意程序攻击。 此外,还有可能存在go-fastdfs的路径遍历漏洞。攻击者可能通过构造特定的请求来绕过路径限制,访问系统中的敏感文件。这可能导致服务器的文件系统被恶意篡改,或者对系统的任意代码执行造成风险。 为了减少这些漏洞的风险,建议用户在使用go-fastdfs时采取以下措施: 1. 定期更新和维护go-fastdfs的最新版本,以确保修复了已知的漏洞和安全问题。 2. 配置严格的访问控制机制,限制用户对文件的访问权限,并禁止未经授权的访问。 3. 对上传的文件进行严格的文件类型验证,确保只有合法的文件类型被上传和下载。 4. 配置防火墙和入侵检测系统,以提高系统的安全性并及时检测到潜在的攻击。 5. 定期进行系统漏洞扫描和安全审计,及时发现并修复潜在的漏洞和安全风险。 总而言之,go-fastdfs作为一个分布式文件系统,虽然存在一些漏洞,但通过采取相应的安全措施,可以有效减少潜在的安全风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LCS-312

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值