当前位置: 技术问答>java相关
求文件上传/下载/显示的解决方法
来源: 互联网 发布时间:2015-09-14
本文导语: 想了解文件上传/下载/显示的具体实现方法,并有以下一些要求: 1. 将文件上传到服务器以Blob对象保存到oracle, 直接读取输入流后写进数据库, 不要采取"上传本地文件"->"在服务器端产生文件"->"读文件流"->"写...
想了解文件上传/下载/显示的具体实现方法,并有以下一些要求:
1. 将文件上传到服务器以Blob对象保存到oracle, 直接读取输入流后写进数据库,
不要采取"上传本地文件"->"在服务器端产生文件"->"读文件流"->"写库"的方式. 要求在写进库之前,得到文件的名称,大小,在判断文件是否存在。
2. 用Servlet实现文件显示。
3. 从数据库读出Blob对象,生成流直接下载到客户端。不要使用
"读取blob对象"->"在服务器目录下生成下载文件"的方式. 最好在界面上
对文件链接可以"左键显示","右键保存下载".
4. 请不要使用jspsmartupload组件
望大虾们能给出解决的办法.
1. 将文件上传到服务器以Blob对象保存到oracle, 直接读取输入流后写进数据库,
不要采取"上传本地文件"->"在服务器端产生文件"->"读文件流"->"写库"的方式. 要求在写进库之前,得到文件的名称,大小,在判断文件是否存在。
2. 用Servlet实现文件显示。
3. 从数据库读出Blob对象,生成流直接下载到客户端。不要使用
"读取blob对象"->"在服务器目录下生成下载文件"的方式. 最好在界面上
对文件链接可以"左键显示","右键保存下载".
4. 请不要使用jspsmartupload组件
望大虾们能给出解决的办法.
|
这样你需要了解浏览器端的编码方式,在传到服务器端时你才能解码。也才可以得到上传文件的相关信息。下面是别处取来的代码,一直没时间去看看,正好你可以研究一下,看是否有用。
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;
}
/**把文件的内容存到指定的文件中,
**这个方法不会检查这个文件是否可写、是否已经存在。
**@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();
}
/**把文件的内容存到指定的文件中,
**这个方法不会检查这个文件是否可写、是否已经存在。
**@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;
}
}
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;
}
/**把文件的内容存到指定的文件中,
**这个方法不会检查这个文件是否可写、是否已经存在。
**@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();
}
/**把文件的内容存到指定的文件中,
**这个方法不会检查这个文件是否可写、是否已经存在。
**@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;
}
}