ASP.NET中上传多文件时,用日期时间命名新文件,这不是个好主意。

网上流行的多文件上传,都是上传之后,用日期时间命名。都认为方便、简单,似乎还能避免同目录下产生相同的文件。
代码大多如下:

string  新文件名  =  DateTime.Now.ToString( " yyMMddHHmmss " );

上面这行代码会导致很有趣的bug:那就是当网站繁忙很多人同时上传的时候,或者一个人多文件同时上传的时候,你会发现,你传上去文件,经常性(跟别人)都是一样的,经常性“丢掉”一些图片。

你会奇怪,为什么?

很简单,服务器处理太快了,几乎1秒内就处理你的多文件上传请求,这一秒内,所有的文件名都相同(因为上面那个行代码就只精确到秒)。

OK,既然是文件名相同,我精确到毫秒,不就解决了?于是有了下面的代码:
string  新文件名  =  DateTime.Now.ToString( " yyMMddHHmmssfff " ); // 精确到毫秒,防止1秒内被处理的文件获得的新名称都相同
经过上面的改造,会发现问题减少了很多,不再经常“丢”图片了……但是,偶尔还是有照片丢失的情况发生……

知道原因吗?MSDN告诉我们:“ Windows系统时钟精确到10~15毫秒”,也即说,DateTime类型只能精确到10~15毫秒。 如果用时间命名,即便精确到毫秒,10~15毫秒内处理的文件,名字仍然会相同,有趣的bug仍然会产生。

故,不推荐使用日期时间命名文件。

那怎么办呢?用Guid!唯一的、一出生即与众不同的家伙,它的唯一性,理论上保证了同一目录下无可能出现重复的文件名。
string  新文件名  =  Guid.NewGuid().ToString( " N " );


本文转自Kai的世界,道法自然博客园博客,原文链接:http://www.cnblogs.com/kaima/archive/2008/05/14/1196283.html,如需转载请自行联系原作者。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值