关于上传用户文件记录的判断
来源:8-9 阿里云OSS本章小结

秋水x
2020-06-03
老师,我在测试第八章代码时,发现用户在上传文件时,如果之前上传过该文件,之后该用户再上传该文件,用户文件表里又增加一条用户文件记录;理想情况应该是用户在上传文件时,应该先判断该用户为年是否已经上传过,如果上传过就将其用户文件记录的文件状态改为1,而不应该是重新增加一条记录吧;我注意到在后端是有判断用户文件是否已上传的函数IsUserFileUploaded,但我没发现第八章代码在上传之前判断该用户文件是否已上传。我在后端加了一个将用户文件记录中文件状态改为1的函数Add1UserFile,
在普通上传接口里添加了这样一段代码,
但测试时并未实现想要的效果。想问下老师,原来的代码是不是存在这样的问题,如果没有这个问题,请问上传前是在哪部分判断了用户文件是否上传?如果有这个问题的话,我这段代码存在什么问题呢?谢谢老师。
写回答
1回答
-
同学你好,普通上传接口是没有作文件是否已经上传的判断的,在秒传的接口(/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的文件有插入操作时,正常情况下是会忽略这次插入的。麻烦贴一下用户文件表的记录数据看看?022020-06-04
相似问题