jsp实现基于web的文件上传的进度控制说明书Word文档下载推荐.docx
- 文档编号:8413428
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:46
- 大小:73.53KB
jsp实现基于web的文件上传的进度控制说明书Word文档下载推荐.docx
《jsp实现基于web的文件上传的进度控制说明书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《jsp实现基于web的文件上传的进度控制说明书Word文档下载推荐.docx(46页珍藏版)》请在冰点文库上搜索。
/**
*本例程演示了通过Web上传文件过程中的进度显示。
您可以对本例程进行任何修改和使用。
*如果需要转载本例程,请您注明作者。
*
*作者:
刘作晨
*EMail:
*/
package;
importjava.util.*;
publicclassFileUploadStatus{
//上传用户地址
privateStringuploadAddr;
//上传总量
privatelonguploadTotalSize=0;
//读取上传总量
privatelongreadTotalSize=0;
//当前上传文件号
privateintcurrentUploadFileNum=0;
//成功读取上传文件数
privateintsuccessUploadFileCount=0;
//状态
privateStringstatus="
"
;
//处理起始时间
privatelongprocessStartTime=0l;
//处理终止时间
privatelongprocessEndTime=0l;
//处理执行时间
privatelongprocessRunningTime=0l;
//上传文件URL列表
privateListuploadFileUrlList=newArrayList();
//取消上传
privatebooleancancel=false;
//上传base目录
privateStringbaseDir="
publicFileUploadStatus(){
}
publicStringgetBaseDir(){
returnbaseDir;
publicvoidsetBaseDir(StringbaseDir){
this.baseDir=baseDir;
publicbooleangetCancel(){
returncancel;
publicvoidsetCancel(booleancancel){
this.cancel=cancel;
publicListgetUploadFileUrlList(){
returnuploadFileUrlList;
publicvoidsetUploadFileUrlList(ListuploadFileUrlList){
this.uploadFileUrlList=uploadFileUrlList;
publiclonggetProcessRunningTime(){
returnprocessRunningTime;
publicvoidsetProcessRunningTime(longprocessRunningTime){
this.processRunningTime=processRunningTime;
publiclonggetProcessEndTime(){
returnprocessEndTime;
publicvoidsetProcessEndTime(longprocessEndTime){
this.processEndTime=processEndTime;
publiclonggetProcessStartTime(){
returnprocessStartTime;
publicvoidsetProcessStartTime(longprocessStartTime){
this.processStartTime=processStartTime;
publiclonggetReadTotalSize(){
returnreadTotalSize;
publicvoidsetReadTotalSize(longreadTotalSize){
this.readTotalSize=readTotalSize;
publicintgetSuccessUploadFileCount(){
returnsuccessUploadFileCount;
publicvoidsetSuccessUploadFileCount(intsuccessUploadFileCount){
this.successUploadFileCount=successUploadFileCount;
publicintgetCurrentUploadFileNum(){
returncurrentUploadFileNum;
publicvoidsetCurrentUploadFileNum(intcurrentUploadFileNum){
this.currentUploadFileNum=currentUploadFileNum;
publicStringgetStatus(){
returnstatus;
publicvoidsetStatus(Stringstatus){
this.status=status;
publiclonggetUploadTotalSize(){
returnuploadTotalSize;
publicStringgetUploadAddr(){
returnuploadAddr;
publicvoidsetUploadTotalSize(longuploadTotalSize){
this.uploadTotalSize=uploadTotalSize;
publicvoidsetUploadAddr(StringuploadAddr){
this.uploadAddr=uploadAddr;
publicStringtoJSon(){
StringBufferstrJSon=newStringBuffer();
strJSon.append("
{UploadTotalSize:
).append(getUploadTotalSize()).append(
"
"
)
.append("
ReadTotalSize:
).append(getReadTotalSize()).append("
CurrentUploadFileNum:
).append(getCurrentUploadFileNum()).
append("
SuccessUploadFileCount:
).append(
getSuccessUploadFileCount()).append("
Status:
'
).append(getStatus()).append("
ProcessStartTime:
).append(getProcessStartTime()).
ProcessEndTime:
).append(getProcessEndTime()).append(
ProcessRunningTime:
).append(getProcessRunningTime()).
Cancel:
).append(getCancel()).append("
}"
);
returnstrJSon.toString();
}
文件上传状态侦听类(FileUploadListener)
使用Common-FileUpload1.2版本()。
此版本提供了能够监视文件上传情况的ProcessListener接口,使开发者通过FileUploadBase类对象的setProcessListener方法植入自己的Listener。
FileUploadListener类实现了ProcessListener,在整个文件上传过程中,它对上传进度进行监控,并且根据上传情况实时的更新上传状态Bean。
import;
publicclassFileUploadListenerimplementsProgressListener{
privateHttpServletRequestrequest=null;
publicFileUploadListener(HttpServletRequestrequest){
this.request=request;
/**
*更新状态
*/
publicvoidupdate(longpBytesRead,longpContentLength,intpItems){
FileUploadStatusstatusBean=BackGroundService.getStatusBean(request);
statusBean.setUploadTotalSize(pContentLength);
//读取完成
if(pContentLength==-1){
statusBean.setStatus("
完成对"
+pItems+"
个文件的读取:
读取了"
+pBytesRead+"
bytes."
statusBean.setReadTotalSize(pBytesRead);
statusBean.setSuccessUploadFileCount(pItems);
statusBean.setProcessEndTime(System.currentTimeMillis());
statusBean.setProcessRunningTime(statusBean.getProcessEndTime());
//读取中
}else{
当前正在处理第"
个文件:
已经读取了"
+pBytesRead+
/"
+pContentLength+"
statusBean.setCurrentUploadFileNum(pItems);
statusBean.setProcessRunningTime(System.currentTimeMillis());
BackGroundService.saveStatusBean(request,statusBean);
后台服务类(BackGroundService)
BackGroundService这个Servlet类负责接收FormPost数据、回应状态轮询请求、处理取消文件上传的请求。
尽管可以把这些功能相互分离开来,但为了简单明了,还是将它们放到Servlet中,只是由不同的方法进行分割。
源代码如下:
*Title:
后台服务
**Description:
为客户端提供上传及文件传输状态查询服务
publicclassBackGroundServiceextendsimplements
{
publicstaticfinalStringUPLOAD_DIR="
/upload"
publicstaticfinalStringDEFAULT_UPLOAD_FAILURE_URL="
./result.jsp"
publicBackGroundService(){
super();
protectedvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)throwsServletException,
IOException{
doPost(request,response);
*从文件路径中取出文件名
privateStringtakeOutFileName(StringfilePath){
intpos=filePath.lastIndexOf(File.separator);
if(pos>
0){
returnfilePath.substring(pos+1);
}else{
returnfilePath;
*从request中取出FileUploadStatusBean
publicstaticFileUploadStatusgetStatusBean(
HttpServletRequestrequest){
BeanControlerbeanCtrl=BeanControler.getInstance();
returnbeanCtrl.getUploadStatus(request.getRemoteAddr());
*把FileUploadStatusBean保存到类控制器BeanControler
publicstaticvoidsaveStatusBean(
HttpServletRequestrequest,
FileUploadStatusstatusBean){
statusBean.setUploadAddr(request.getRemoteAddr());
beanCtrl.setUploadStatus(statusBean);
*删除已经上传的文件
privatevoiddeleteUploadedFile(HttpServletRequestrequest){
FileUploadStatussatusBean=getStatusBean(request);
for(inti=0;
i<
satusBean.getUploadFileUrlList().size();
i++){
FileuploadedFile=newFile(request.getRealPath(UPLOAD_DIR)+
File.separator+
satusBean.getUploadFileUrlList().
get(i));
uploadedFile.delete();
satusBean.getUploadFileUrlList().clear();
satusBean.setStatus("
删除已上传的文件"
saveStatusBean(request,satusBean);
*上传过程中出错处理
privatevoiduploadExceptionHandle(
StringerrMsg)throwsServletException,IOException{
//首先删除已经上传的文件
deleteUploadedFile(request);
satusBean.setStatus(errMsg);
*初始化文件上传状态Bean
privateFileUploadStatusinitStatusBean(HttpServletRequest
request){
FileUploadStatussatusBean=newFileUploadStatus();
正在准备处理"
satusBean.setUploadTotalSize(request.getContentLength());
satusBean.setProcessStartTime(System.currentTimeMillis());
satusBean.setBaseDir(request.getContextPath()+UPLOAD_DIR);
returnsatusBean;
*处理文件上传
privatevoidprocessFileUpload(HttpServletRequestrequest,
HttpServletResponseresponse)throws
ServletException,IOException{
DiskFileItemFactoryfactory=newDiskFileItemFactory();
//设置内存缓冲区,超过后写入临时文件
factory.setSizeThreshold();
//设置临时文件存储位置
factory.setRepository(newFile(request.getRealPath("
/upload/temp"
)));
ServletFileUploadupload=newServletFileUpload(factory);
//设置单个文件的最大上传值
upload.setFileSizeMax(0);
//设置整个request的最大值
upload.setSizeMax(0);
upload.setProgressListener(newFileUploadListener(request));
//保存初始化后的FileUploadStatusBean
saveStatusBean(request,initStatusBean(request));
StringforwardURL="
try{
Listitems=upload.parseRequest(request);
//获得返回url
items.size();
FileItemitem=(FileItem)items.get(i);
if(item.isFormField()){
forwardURL=item.getString();
break;
//处理文件上传
if(getStatusBean(request).getCancel()){
//保存文件
elseif(!
item.isFormField()&
&
item.getName().length()>
StringfileName=takeOutFileName(item.getName());
File.separator+fileName);
item.write(uploadedFile);
//更新上传文件列表
FileUploadStatussatusBean=
getStatusBean(request);
satusBean.getUploadFileUrlList().add
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jsp 实现 基于 web 文件 上传 进度 控制 说明书