希望我的回答对你有帮助,望采纳
很简单。可以手写IO读写(有点麻烦)。
怕麻烦的话使用FileUpload组件 在servlet里doPost嵌入一下代码
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/htmlcharset=gb2312")
PrintWriter out=response.getWriter()
//设置保存上传文件的目录
String uploadDir =getServletContext().getRealPath("/up")
System.out.println(uploadDir)
if (uploadDir == null)
{
out.println("无法访问存储目录!")
return
}
//根据路径创建一个文件
File fUploadDir = new File(uploadDir)
if(!fUploadDir.exists()){
if(!fUploadDir.mkdir())//如果UP目录不存在 创建一个 不能创建输出...
{
out.println("无法创建存储目录!")
return
}
}
if (!DiskFileUpload.isMultipartContent(request))
{
out.println("只能处理multipart/form-data类型的数据!")
return
}
DiskFileUpload fu = new DiskFileUpload()
//最多上传200M数据
fu.setSizeMax(1024 * 1024 * 200)
//超过1M的字段数据采用临时文件缓存
fu.setSizeThreshold(1024 * 1024)
//采用默认的临时文件存储位置
//fu.setRepositoryPath(...)
//设置上传的普通字段的名称和文件字段的文件名所采用的字符集编码
fu.setHeaderEncoding("gb2312")
//得到所有表单字段对象的集合
List fileItems = null
try
{
fileItems = fu.parseRequest(request)//解析request对象中上传的文件
}
catch (FileUploadException e)
{
out.println("解析数据时出现如下问题:")
e.printStackTrace(out)
return
}
//处理每个表单字段
Iterator i = fileItems.iterator()
while (i.hasNext())
{
FileItem fi = (FileItem) i.next()
if (fi.isFormField()){
String content = fi.getString("GB2312")
String fieldName = fi.getFieldName()
request.setAttribute(fieldName,content)
}else{
try
{
String pathSrc = fi.getName()
if(pathSrc.trim().equals("")){
continue
}
int start = pathSrc.lastIndexOf('\\')
String fileName = pathSrc.substring(start + 1)
File pathDest = new File(uploadDir, fileName)
fi.write(pathDest)
String fieldName = fi.getFieldName()
request.setAttribute(fieldName, fileName)
}catch (Exception e){
out.println("存储文件时出现如下问题:")
e.printStackTrace(out)
return
}
finally //总是立即删除保存表单字段内容的临时文件
{
fi.delete()
}
}
}
注意 JSP页面的form要加enctype="multipart/form-data" 属性, 提交的时候要向服务器说明一下 此页面包含文件。
如果 还是麻烦,干脆使用Struts 的上传组件 他对FileUpload又做了封装,使用起来更傻瓜化,很容易掌握。
-----------------------------
以上回答,如有不明白可以联系我。
给你段代码,是用来在ie上显示图片的(servlet):public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String id = request.getParameter("id")
File file = new File(getServletContext().getRealPath("/")+"out"+"/"+id+".gif")
response.setCharacterEncoding("gb2312")
response.setContentType("doc")
response.setHeader("Content-Disposition", "attachmentfilename=" + new String(file.getName().getBytes("gb2312"),"iso8859-1"))
System.out.println(new String(file.getName().getBytes("gb2312"),"gb2312"))
OutputStream output = null
FileInputStream fis = null
try
{
output = response.getOutputStream()
fis = new FileInputStream(file)
byte[] b = new byte[1024]
int i = 0
while((i = fis.read(b))!=-1)
{
output.write(b, 0, i)
}
output.write(b, 0, b.length)
output.flush()
response.flushBuffer()
}
catch(Exception e)
{
System.out.println("Error!")
e.printStackTrace()
}
finally
{
if(fis != null)
{
fis.close()
fis = null
}
if(output != null)
{
output.close()
output = null
}
}
}
这个程序的功能是根据传入的文件名(id),来为浏览器返回图片流,显示在<img>标签里
标签的格式写成如下:
<img src="http://localhost:8080/app/preview?id=111 "/><br/>
显示的是111.gif这个图片
你上面的问题:
1.我觉得你的第二个办法是对的,我们也是这样做的,需要的是把数据库的记录id号传进servlet,然后读取这条记录中的路径信息,生成流以后返回就是了
关于上传文件的问题,我记得java中应该专门有个负责文件上传的类,你调用就行了,上传后存储在指定的目录里,以实体文件的形式存放
你可以参考这个:
http://blog.csdn.net/arielxp/archive/2004/09/28/119592.aspx
回复:
1.是的,在response中写入流就行了
2.是发到servlet中的,我们一般都是写成servlet,短小精悍,使用起来方便,struts应该也可以,只是我没有试过,恩,你理解的很对
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)