web 中常用的上传文件的方法总结
这里我们来总结整理一下常用的文件上传方式以及要注意的东西:
1、org.apache.commons.fileupload 使用apache的fileuoload 来实现
包
无论使用框架还是单独的jsp页面,最终都还是要解析HTTP请求数据
我们需要的是简单的,容易配置的项目。模块划分清晰的。最好代码编写比较优雅。
在这里为了简单的演示接收上传数据,我们使用简单的jsp页面来演示,这样便于理解
代码如下:
文字版
String uid = request.getHeader("uid");//
String id = request.getHeader("id");
String md5 = request.getHeader("md5");
String lenSvr = request.getHeader("lenSvr");
String lenLoc = request.getHeader("lenLoc");
String blockOffset = request.getHeader("blockOffset");
String blockSize = request.getHeader("blockSize");
String blockIndex = request.getHeader("blockIndex");
String complete = request.getHeader("complete");
String pathSvr = request.getHeader("pathSvr");
pathSvr = PathTool.url_decode(pathSvr);
//参数为空
if( StringUtils.isBlank( uid )
|| StringUtils.isBlank( id )
|| StringUtils.isBlank( blockOffset )
|| StringUtils.isBlank(pathSvr))
{
XDebug.Output("param is null");
return;
}
// Check that we have a file upload request
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List files = null;
try
{
files = upload.parseRequest(request);
}
catch (FileUploadException e)
{// 解析文件数据错误
out.println("read file data error:" + e.toString());
return;
}
FileItem rangeFile = null;
// 得到所有上传的文件
Iterator fileItr = files.iterator();
// 循环处理所有文件
while (fileItr.hasNext())
{
// 得到当前文件
rangeFile = (FileItem) fileItr.next();
}
//文件块验证
if(Integer.parseInt(blockSize) == rangeFile.getSize())
{
//保存文件块数据
FileBlockWriter res = new FileBlockWriter();
res.write( Long.parseLong(blockOffset),pathSvr,rangeFile);
rangeFile.delete();
out.write("ok");
}
else
{
rangeFile.delete();
out.write("block size error");
}%>
当选择文件完毕后控件将开始自动上传。数据将会发送到指定的位置,在这里是f_post.jsp页面
配置截图
注意地址要配置完整,端口号要配置正确。因为实际应用中我们发现很多开发人员的本地环境端口并不是8080,由于端口不正确导致发送数据错误或者无法上传。
到这里基本上就结束了。