📄 1046047.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>1046047</TopicId>
<TopicName>求文件上传/下载/显示的解决方法</TopicName>
<PostUserId>170689</PostUserId>
<PostUserName>linetsam</PostUserName>
<RoomName>JSP</RoomName>
<ReplyNum>7</ReplyNum>
<PostDateTime>2002-9-23 14:52:14</PostDateTime>
<Point>100</Point>
<ReadNum>0</ReadNum>
<RoomId>28</RoomId>
<EndState>2</EndState>
<Content>想了解文件上传/下载/显示的具体实现方法,并有以下一些要求:
1. 将文件上传到服务器以Blob对象保存到oracle, 直接读取输入流后写进数据库,
   不要采取"上传本地文件"->"在服务器端产生文件"->"读文件流"->"写库"的方式. 要求在写进库之前,得到文件的名称,大小,在判断文件是否存在。
   
2. 用Servlet实现文件显示。
3. 从数据库读出Blob对象,生成流直接下载到客户端。不要使用
   "读取blob对象"->"在服务器目录下生成下载文件"的方式. 最好在界面上
   对文件链接可以"左键显示","右键保存下载".
4. 请不要使用jspsmartupload组件
望大虾们能给出解决的办法.
</Content>
</Issue>
<Replys>
<Reply>
<PostUserNickName>Tom</PostUserNickName>
<rank>五级(中级)</rank>
<ranknum>user5</ranknum>
<credit>100</credit>
<ReplyID>6751109</ReplyID>
<TopicID>1046047</TopicID>
<PostUserId>95303</PostUserId>
<PostUserName>Tomcat4</PostUserName>
<Point>0</Point>
<Content>为什么不用jspsmartupload组建?
而且增加数据库压力!</Content>
<PostDateTime>2002-9-23 15:15:09</PostDateTime>
</Reply>
<Reply>
<PostUserNickName></PostUserNickName>
<rank>一级(初级)</rank>
<ranknum>user1</ranknum>
<credit>100</credit>
<ReplyID>6751945</ReplyID>
<TopicID>1046047</TopicID>
<PostUserId>170689</PostUserId>
<PostUserName>linetsam</PostUserName>
<Point>0</Point>
<Content>1. 想了解文件传输处理中的具体细节.
2. jspsmartupload只是第三方的东西,如果有一天,jspsmart组件的
   升级没跟上jsdk的发展怎么办?所以最好还是自己动手做了.
3. 虽然增加了数据库压力,如果硬件等各方面的性能能够保证,
   认为文件管理的方便性比访问效率更重要,就可采用数据库保存。
4. 直接保存到数据库可以避免上传/下载时文件同名等头疼的问题。(对我来
   说,这是最主要的).
</Content>
<PostDateTime>2002-9-23 15:53:48</PostDateTime>
</Reply>
<Reply>
<PostUserNickName></PostUserNickName>
<rank>二级(初级)</rank>
<ranknum>user2</ranknum>
<credit>100</credit>
<ReplyID>6755381</ReplyID>
<TopicID>1046047</TopicID>
<PostUserId>233360</PostUserId>
<PostUserName>hpq852</PostUserName>
<Point>0</Point>
<Content>jspsmart的确很好用
不过你可以把jspsmart的文件反编译一下
看看里面的源代码
可能对你有帮助</Content>
<PostDateTime>2002-9-23 18:35:45</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>小唐蔡</PostUserNickName>
<rank>四级(中级)</rank>
<ranknum>user4</ranknum>
<credit>100</credit>
<ReplyID>6756398</ReplyID>
<TopicID>1046047</TopicID>
<PostUserId>246001</PostUserId>
<PostUserName>Tmsheng</PostUserName>
<Point>100</Point>
<Content>这样你需要了解浏览器端的编码方式,在传到服务器端时你才能解码。也才可以得到上传文件的相关信息。下面是别处取来的代码,一直没时间去看看,正好你可以研究一下,看是否有用。
package mshtang.fileUpload;
import java.io.*;
/**一个存放文件信息的类,包括文件的名称(String),
**字段名(String), Content-Type(String)和内容(byte[])
**还提供了一个直接将文件内容保存到一个文件的函数 void saveTo(File f)
**可以调用 类{@link ContentFactory}中的适当方法,生成该类的实例。
** @see ContentFactory
** @see ContentFactory#getFileParameter
** @see ContentFactory#getFileParameterValues
**/
public class FileHolder
{
    String contentType;
    byte[] buffer;
    String fileName;
    String parameterName;
    FileHolder(byte[] buffer, String contentType, String fileName, String parameterName)
    {
        this.buffer = buffer;
        this.contentType = contentType;
        this.fileName = fileName;
        this.parameterName = parameterName;
    }
    /**把文件的内容存到指定的文件中,
    **<b>这个方法不会检查这个文件是否可写、是否已经存在。</b>
    **@param file  目的文件
    **@throws 在 I/O 操作中被抛出的 IOException
    **/
    public void saveTo(File file) throws IOException
    {
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
        out.write(buffer);
        out.close();
    }
    /**把文件的内容存到指定的文件中,
    **<b>这个方法不会检查这个文件是否可写、是否已经存在。</b>
    **@param name 目的文件名
    **@throws 在 I/O 操作中被抛出的 IOException
    **/
    public void saveTo(String name) throws IOException
    {
        saveTo(new File(name));
    }
   /**
    **返回一个文件内容的字节数组
    **@return 一个代表文件内容的字节数组
   **/
    public byte[] getBytes()
    {
        return buffer;
    }
   /**
    **返回该文件在文件上载前在客户端的名称
    **@return 该文件在文件上载前在客户端的名称
   **/
    public String getFileName()
    {
        return fileName;
    }
   /**
    **返回该文件的 Content-Type
    **@return 该文件的 Content-Type
   **/
    public String getContentType()
    {
        return contentType;
    }
   /**
    **返回上载该文件时,Html 页面窗体中 file 控件的 name 属性
    **@return 返回上载该文件时,Html 页面窗体中 file 控件的 name 属性
   **/
    public String getParameterName()
    {
        return parameterName;
    }
}</Content>
<PostDateTime>2002-9-23 19:37:09</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>小唐蔡</PostUserNickName>
<rank>四级(中级)</rank>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -