关于上传用户文件记录的判断

来源:8-9 阿里云OSS本章小结

秋水x

2020-06-03

老师,我在测试第八章代码时,发现用户在上传文件时,如果之前上传过该文件,之后该用户再上传该文件,用户文件表里又增加一条用户文件记录;理想情况应该是用户在上传文件时,应该先判断该用户为年是否已经上传过,如果上传过就将其用户文件记录的文件状态改为1,而不应该是重新增加一条记录吧;我注意到在后端是有判断用户文件是否已上传的函数IsUserFileUploaded,但我没发现第八章代码在上传之前判断该用户文件是否已上传。我在后端加了一个将用户文件记录中文件状态改为1的函数Add1UserFile,
图片描述
在普通上传接口里添加了这样一段代码,
图片描述
但测试时并未实现想要的效果。想问下老师,原来的代码是不是存在这样的问题,如果没有这个问题,请问上传前是在哪部分判断了用户文件是否上传?如果有这个问题的话,我这段代码存在什么问题呢?谢谢老师。

写回答

1回答

xiaomo

2020-06-04

同学你好,普通上传接口是没有作文件是否已经上传的判断的,在秒传的接口(/file/fastupload)里有做这个判断.

之前代码没有这个问题呢,最近代码有更新过,我再验证一下。另外用户文件表有做唯一key约束的,建表语句如下:

-- 创建用户文件表
CREATE TABLE `tbl_user_file` (
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`user_name` varchar(64) NOT NULL,
`file_sha1` varchar(64) NOT NULL DEFAULT '' COMMENT '文件hash',
`file_size` bigint(20) DEFAULT '0' COMMENT '文件大小',
`file_name` varchar(256) NOT NULL DEFAULT '' COMMENT '文件名',
`upload_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
`last_update` datetime DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
`status` int(11) NOT NULL DEFAULT '0' COMMENT '文件状态(0正常1已删除2禁用)',
UNIQUE KEY `idx_user_file` (`user_name`, `file_sha1`),
KEY `idx_status` (`status`),
KEY `idx_user_id` (`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

参考这里:UNIQUE KEY `idx_user_file` (`user_name`, `file_sha1`),
如果同一个hash的文件有插入操作时,正常情况下是会忽略这次插入的。麻烦贴一下用户文件表的记录数据看看?

0
2
xiaomo
回复
秋水x
恭喜恭喜
2020-06-04
共2条回复

Go实战仿百度云盘-实现企业级分布式云存储系统

紧随“云时代”技术潮流,分布式云存储系统,做第一代云程序员

1077 学习 · 494 问题

查看课程