卡比图床项目——上传文件

171 阅读2分钟

LeanCloud实现文件上传、图片信息状态管理

查找LeanCloud的案例,

截屏2022-12-17 09.45.15.png 我们的项目只会涉及到title,owner以及image即可。 官方实例如下: 截屏2022-12-17 09.46.40.png

回到models目录下的index.js开始仿写文件上传相关的状态管理。

截屏2022-12-17 10.16.36.png

页面的组件会使用这个接口以及状态,所以我们还要新增一个关于图片上传的store用来管理上传数据。

截屏2022-12-17 10.37.15.png 上传这里返回一个promise对象

截屏2022-12-17 15.32.59.png

截屏2022-12-17 10.36.51.png 至此实现了模型层面的逻辑。

受控表单与useRef简易上传

新建一个组件Uploader,准备做一个简单的上传功能,再进行拓展。

如何实现上传?

利用一个file类型的input让用户点击实现上传。 使用useRef给这个input进行标记,这样就可以通过ref来定位到它。

截屏2022-12-17 13.09.16.png

添加事件监听:

截屏2022-12-17 13.18.47.png 这时需要引入我们的上传逻辑,在stores目录下的index.js中暴露出来并在组件中

截屏2022-12-17 13.24.28.png

现在组件尚未被观察,还需要订阅这些信息。还要引入mobx的observer

截屏2022-12-17 15.32.51.png

使用antd的上传组件

我们只是使用antd的UI,逻辑还是使用我们自己的。

引入Dragger

截屏2022-12-17 15.53.14.png 在props中引入我们自己的上传逻辑并且返回 false来阻止自动上传。

截屏2022-12-17 15.54.14.png

现在上传成功以后没办法知道上传结果,所以继续优化

截屏2022-12-17 16.02.06.png

上传限制

增加一些上传逻辑:如果用户没有登录/注册那么是不能进行图片的上传,会出现一个提示用户登录的提示条。用户登录之后则会隐藏这个提示条。 方便起见,我们把这一部分单独划作一个组件Tips组件。

显示逻辑如下:如果用户登录了就什么都不显示,反之则显示Tips组件。

截屏2022-12-18 13.47.07.png

在Tips中引入我们的UserStore以及observer,并且通过styled-components进行样式调整

截屏2022-12-18 14.00.25.png

截屏2022-12-18 14.00.30.png 样式如下: 截屏2022-12-18 14.00.58.png

在上传逻辑中调整:在用户没登录的时候要执行上传失败

来到UpLoader组件,在执行逻辑中进行条件判断。

截屏2022-12-18 14.05.11.png

截屏2022-12-18 14.06.22.png

上传结果展示

上传结果展示这里也可以继续优化,可以展示文件名,文件的url变成一个可以点击的a链接,还有一个可配置大小的部分,并生成一个新的结果。

截屏2022-12-18 14.38.27.png

结果如下: 截屏2022-12-18 14.38.56.png

实现定制图片尺寸

我们用到了mobx中的useLocalStore管理本地状态。

截屏2022-12-19 15.10.09.png 现在还没有办法获取用户在input中输入的数字,所以使用useRef进行标记

截屏2022-12-19 15.12.21.png 在状态管理中新增设置宽高的逻辑。

截屏2022-12-19 15.16.59.png

出现了链接,但是无法做到更新 截屏2022-12-19 15.17.13.png

分别增加onChange事件 截屏2022-12-19 15.18.51.png

截屏2022-12-19 15.21.57.png

可以了同步更新了

截屏2022-12-19 15.20.07.png