请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

老师,我在测试第八章代码时,发现用户在上传文件时,如果之前上传过该文件,之后该用户再上传该文件,用户文件表里又增加一条用户文件记录;理想情况应该是用户在上传文件时,应该先判断该用户为年是否已经上传过,如果上传过就将其用户文件记录的文件状态改为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的文件有插入操作时,正常情况下是会忽略这次插入的。麻烦贴一下用户文件表的记录数据看看?

0 回复 有任何疑惑可以回复我~
  • 提问者 秋水x #1
    老师,不好意思。这个用户文件表创建时我确实未指定用户名和文件哈希为唯一约束,现在问题解决了!谢谢老师!
    回复 有任何疑惑可以回复我~ 2020-06-04 22:13:53
  • xiaomo 回复 提问者 秋水x #2
    恭喜恭喜
    回复 有任何疑惑可以回复我~ 2020-06-04 23:55:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信