可以手写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又做了封装,使用起来更傻瓜化,很容易掌握。
-----------------------------
以上回答,如有不明白可以联系我。
提交页面表单<form action="up.jsp" enctype="multipart/form-data" method="post">
<input type="file" name="file">
<input type="submit" value="确定">
</form>
上传页面up.jsp
<%@page import="java.io.FileWriter"%>
<%@ page language="java" contentType="text/htmlcharset=UTF-8"
import="java.io.*"
pageEncoding="UTF-8"%>
<%
/**
协议头四行内容
45 -----------------------------7de231211204c4
80 Content-Disposition: form-dataname="file"filename="xx.txt"
26 Content-Type: text/plain
2
标记文件结尾
-----------------------------7de231211204c4--
**/
ServletInputStream sin = request.getInputStream()
byte[] buffer = new byte[1024 * 8]
int length = 0, row = 0
String mark = ""
String filename = ""
while ((length = sin.readLine(buffer, 0, buffer.length)) >0) {
out.println(length + "" + new String(buffer, 0, length, "UTF-8") + "<br>")
String s = new String(buffer, 0, length, "UTF-8")
if (row == 0)
mark = s.trim()
else if (s.indexOf("filename=") >0) {
int end = s.lastIndexOf("\"")
int start = s.substring(0, end).lastIndexOf("\"")
filename = s.substring(start + 1, end)
} else if ("".equals(s.trim()))
break
row ++
}
out.println("filename:" + filename + "<br>")
filename = request.getRealPath("/") + "../" + filename
FileOutputStream fout = new FileOutputStream(filename)
while ((length = sin.readLine(buffer, 0, buffer.length)) >0) {
String s = new String(buffer, 0, length)
if (s.startsWith(mark))
break
fout.write(buffer, 0, length)
}
fout.flush()
fout.close()
File f = new File(filename)
out.println(f.exists())
out.println(f.getAbsolutePath())
%>
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)