📄 672647.xml
字号:
<?xml version='1.0' encoding='GB2312'?>
<?xml-stylesheet type='text/xsl' href='../csdn.xsl'?>
<Topic>
<Issue>
<PostUserNickName>乔乔</PostUserNickName>
<rank>一级(初级)</rank>
<ranknum>user1</ranknum>
<credit>100</credit>
<TopicId>672647</TopicId>
<TopicName>jsp中如何上传附件到服务器的目录</TopicName>
<PostUserId>157927</PostUserId>
<PostUserName>sdduwa</PostUserName>
<RoomName>JSP</RoomName>
<ReplyNum>14</ReplyNum>
<PostDateTime>2002-4-24 14:09:18</PostDateTime>
<Point>100</Point>
<ReadNum>0</ReadNum>
<RoomId>28</RoomId>
<EndState>2</EndState>
<Content>在jsp中的文本框中粘贴附件的路径,例如:c:\aaa\test.txt
把此文件以“/uploadfile/bbb/2002042400000001.txt”的形式存储在数据库中,
并把此文件存储在服务器的“x:/../uploadfile/bbb/2002042400000001.txt”路径
同时在显示的时候可以查看该附件
注:需要给出上传的源代码和查看的源代码,(javabeans以及jsp调用方法)
不要再网上查找之后再给我,一定要是你实践过的,并且编译通过,否则一律不给分。
</Content>
</Issue>
<Replys>
<Reply>
<PostUserNickName>灯泡</PostUserNickName>
<rank>一星(中级)</rank>
<ranknum>star1</ranknum>
<credit>134</credit>
<ReplyID>4418451</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>98085</PostUserId>
<PostUserName>leonzhao</PostUserName>
<Point>0</Point>
<Content>糟糕的设计。
1、数据库很快就会性能越来越差,然后就崩溃了。
2、你怎么保证数据的同步,也就是说文件系统的文件和数据库里面的大对象是一致的??
3、如果你说的是只保存一个连接,/uploadfile/bbb/2002042400000001.txt还差不多,但是同样存在着数据一致性的问题。
最后:
代码自己想去,这里是个研究问题的地方,不是个帮人写代码的地方,你给我1000分又怎样?我能当饭吃?(专家?那个东西和我有什么关系了?!?!打死M$)</Content>
<PostDateTime>2002-4-24 14:28:11</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>晓彬</PostUserNickName>
<rank>两星(中级)</rank>
<ranknum>star2</ranknum>
<credit>135</credit>
<ReplyID>4418664</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>173450</PostUserId>
<PostUserName>Andrawu</PostUserName>
<Point>0</Point>
<Content>当然,我有。你可试试,不过粘贴附件的路径是不行的,但要选择文件路径。不知行不行。</Content>
<PostDateTime>2002-4-24 14:40:04</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>晓彬</PostUserNickName>
<rank>两星(中级)</rank>
<ranknum>star2</ranknum>
<credit>135</credit>
<ReplyID>4418700</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>173450</PostUserId>
<PostUserName>Andrawu</PostUserName>
<Point>0</Point>
<Content>不过, leonzhao(灯泡) 说得也有道理。</Content>
<PostDateTime>2002-4-24 14:41:57</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>乔乔</PostUserNickName>
<rank>一级(初级)</rank>
<ranknum>user1</ranknum>
<credit>100</credit>
<ReplyID>4422614</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>157927</PostUserId>
<PostUserName>sdduwa</PostUserName>
<Point>0</Point>
<Content>我就是要把 uploadfile/bbb/2002042400000001.txt存储在数据库上</Content>
<PostDateTime>2002-4-24 17:49:51</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>灯泡</PostUserNickName>
<rank>一星(中级)</rank>
<ranknum>star1</ranknum>
<credit>134</credit>
<ReplyID>4428544</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>98085</PostUserId>
<PostUserName>leonzhao</PostUserName>
<Point>0</Point>
<Content>所以才说糟糕的设计,数据库一份,文件系统一份,最后的结果就是两份不一致的可能性越来越大(看看CSDN满屏幕的Bug你就知道了)。同时数据库的性能也就越来越糟糕了。</Content>
<PostDateTime>2002-4-25 6:19:53</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>乔乔</PostUserNickName>
<rank>一级(初级)</rank>
<ranknum>user1</ranknum>
<credit>100</credit>
<ReplyID>4430122</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>157927</PostUserId>
<PostUserName>sdduwa</PostUserName>
<Point>0</Point>
<Content>leonzhao(灯泡) ,你有什么好的方法?交流一下</Content>
<PostDateTime>2002-4-25 9:34:48</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>灯泡</PostUserNickName>
<rank>一星(中级)</rank>
<ranknum>star1</ranknum>
<credit>134</credit>
<ReplyID>4436203</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>98085</PostUserId>
<PostUserName>leonzhao</PostUserName>
<Point>0</Point>
<Content>数据库的哪分不要,文件系统一份就可以了,数据库的连接于文件系统相对应,但是所有的文件全部都是由系统管理。你不要想通过http协议直接访问文件,文件放在什么地方系统管理,通过模拟两阶段提交的方式保证系统完整性。</Content>
<PostDateTime>2002-4-25 14:04:39</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>东南西北</PostUserNickName>
<rank>四级(中级)</rank>
<ranknum>user4</ranknum>
<credit>110</credit>
<ReplyID>4447237</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>129031</PostUserId>
<PostUserName>jacob1</PostUserName>
<Point>40</Point>
<Content>我也想在这里一起探讨一下,
我想 sdduwa(乔乔) 的意思是说在数据库中的某个字段只保留那份文件的相对路径吧? 或更简单来说是只保留文件名。 然后在每次读取时读出相对路径(或仅文件名),然后系统根据文件名找出文件读出内容,对吧?
我想问问 leonzhao(灯泡) ,这样的设计为何糟糕呢? 我对这些文件的操作不通过操作系统而全部通过我自己设计的管理系统操作不就保存数据一致性了吗?
另外,我还没看明白你所说的“数据库那份不要。。。”那段话的含义是什么,能具体的谈谈这个问题吗? 在弄明白后,为了感谢你,我也会开新帖送分感谢你的 ,呵呵   :)</Content>
<PostDateTime>2002-4-26 1:40:27</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>灯泡</PostUserNickName>
<rank>一星(中级)</rank>
<ranknum>star1</ranknum>
<credit>134</credit>
<ReplyID>4447602</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>98085</PostUserId>
<PostUserName>leonzhao</PostUserName>
<Point>60</Point>
<Content>to jacob1(林叶) 
可是我理解的sdduwa(乔乔) 的意思却是文件系统一份,数据库中一份。如果是我理解sdduwa(乔乔)错了那就最好不过了。
sdduwa(乔乔) 来这里找寻源代码,这种简单源代码(传一个文件,写一条记录;通过查询一个记录找到一个文件)到处都是,但是如果sdduwa(乔乔) 认为这样就结束的话可就大大不对了。
在jacob1(林叶) 来想,这个事情很明白:存储连接,保证系统不会被第三方干预。按照你所说的“我对这些文件的操作不通过操作系统而全部通过我自己设计的管理系统操作不就保存数据一致性了”。我们先看一个例子:
CSDN.net这个网站具体的设计我也不清楚,但是我估计是这样的:数据库存一份所有的回复和帖子,而且不是以大字段存的。因此有8000字的限制,使用起来非常不方便,经常一个程序要分很多次往里面录入(失败1)。由于使用SQL Server,系统不能支持很大的并发和数据请求(性能受到了很大的影响:失败2),所以现在的的CSDN将旧帖子分开存放(分到多个表中),当然这种分开存放一方面是性能因素,另一方面可能是最初设计失败造成表结构需要更改。现在的CSDN可能是每个帖子的记录在一个表里面,帖子的标题、分数等等其他相关的信息在另一个表里面(其中还可能牵涉到多个表)在旧的系统中,每次每个人打开帖子都会到数据库中做复杂的查询,于是系统很快就完蛋了。(以上的讲的是数据库中存文本的一些问题,如果存Blob的话性能下降的更快,连Oracle这种“吹自己强壮”的DB都不能坚持住的)。
待续……</Content>
<PostDateTime>2002-4-26 7:16:13</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>灯泡</PostUserNickName>
<rank>一星(中级)</rank>
<ranknum>star1</ranknum>
<credit>134</credit>
<ReplyID>4447735</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>98085</PostUserId>
<PostUserName>leonzhao</PostUserName>
<Point>0</Point>
<Content>然后CSDN想出来一个“好点子”:系统存完了数据后生成一个XML文件,每次只要连接过去就可以了!于是CSDN改版了,结果就是现在的系统。每次“自动”生成XML文件。可惜这个生成动作好像竟然需要客户浏览器触发!(这也是失败,不过和本主题无关)。因此现在大家看到的就是一堆XML文件。相信所有的人都有因此得到过404 Not Found的错误了(这才是失败中的失败)。
按理论说,CSDN的所有文件也都是由系统管理的,没有人工干预的,但是问题还是出现了。原因很简单,不是所有的事务都可以成功的。对于数据库的操作我们可以把多个操作放在一个事务当中,减少“不同步”的几率;但是同时对数据库和文件系统的操作却如何保证呢?于是例如“数据库添加记录但是文件系统没有变”;“文件已经被删除但是数据库里面还有记录”等等问题就都会出现了。
解决这种问题意味着需要做出一个完整的系统(叫做内容管理)。你需要对可能出现的对Blob对象(不会进数据库的)操作的异常做完整的判断,这样的话就可能已经不是jacob1(林叶)最初设想的结果了。数据库中不仅需要存储一个文件位置的连接,包括文件的生成日期、最后修改日期、文件大小、类型等等很多的文件的属性信息去定位这个文件(我只是举出一些例子)。系统会根据这些数据获取文件,而不是一个简单的URL送给客户端。系统必须对文件的状态进行监控,至少对于文件的修改、删除(或移动)等“非法”的操作进行判断。
以上的这些都是对企业文档管理、内容管理这个层面的应用说的,如果你只是做个小东西玩玩的话大可不必看,随便怎么做都是可以的。而且做这样的一个系统其实很复杂的,决不是可以将代码放上来的情况。如果说是现成的系统的话,据我所知,只有IBM的Content Manager现在已经做到了(广告?!:请访问www.ibm.com/software/data/cm获取详细信息……哈哈哈)
Over and out!</Content>
<PostDateTime>2002-4-26 7:57:16</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>乔乔</PostUserNickName>
<rank>一级(初级)</rank>
<ranknum>user1</ranknum>
<credit>100</credit>
<ReplyID>4450767</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>157927</PostUserId>
<PostUserName>sdduwa</PostUserName>
<Point>0</Point>
<Content>leonzhao(灯泡), jacob1(林叶)说的是与我的想法想符合的,但我不明白为什么你说不要想通过http协议直接访问文件,而我正是想通过http协议访问该文件,能给解释一下为什么不能的原因吗?</Content>
<PostDateTime>2002-4-26 10:43:03</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>灯泡</PostUserNickName>
<rank>一星(中级)</rank>
<ranknum>star1</ranknum>
<credit>134</credit>
<ReplyID>4456592</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>98085</PostUserId>
<PostUserName>leonzhao</PostUserName>
<Point>0</Point>
<Content>原因其实已经解释,直接访问的话你不能保证文件的状态。</Content>
<PostDateTime>2002-4-26 15:05:03</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>灯泡</PostUserNickName>
<rank>一星(中级)</rank>
<ranknum>star1</ranknum>
<credit>134</credit>
<ReplyID>4473129</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>98085</PostUserId>
<PostUserName>leonzhao</PostUserName>
<Point>0</Point>
<Content>嗯,白写了这么多。</Content>
<PostDateTime>2002-4-27 13:01:33</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>乔乔</PostUserNickName>
<rank>一级(初级)</rank>
<ranknum>user1</ranknum>
<credit>100</credit>
<ReplyID>4474735</ReplyID>
<TopicID>672647</TopicID>
<PostUserId>157927</PostUserId>
<PostUserName>sdduwa</PostUserName>
<Point>0</Point>
<Content>哪能让你白写这么多,但为了结束贴子</Content>
<PostDateTime>2002-4-27 14:11:16</PostDateTime>
</Reply>
</Replys>
</Topic>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -