java文件上传带进度条的

          本文将使用   apache fileupload   ,spring MVC   jquery1.6x , bootstrap  实现一个带进度条的多文件上传,

由于fileupload 的局限,暂不能实现每个上传文件都显示进度条,只能实现一个总的进度条,效果如图,

此文我们假定你了解SPRING MVC   ,jquery  

bootstrap 可以到此下载:http://www.bootcss.com/

两个JAR包 :commons-fileupload-1.2.jar

                      commons-io-2.4.jar




1.jsp 页面

<!DOCTYPE html>
<%@ page contentType="text/html;charset=UTF-8"%>  
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="../js/jquery-1.6.4.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="../css/bootstrap.css"/>
</head>
<body>
		<form id='fForm' class="form-actions form-horizontal" action="../upload.html" 
		      encType="multipart/form-data" target="uploadf" method="post">
				 <div class="control-group">
					<label class="control-label">上传文件:</label>
					<div class="controls">
						<input type="file"  name="file" style="width:550">
							
					</div>
					<div class="controls">
						<input type="file"  name="file" style="width:550">
					</div>
					<div class="controls">
						<input type="file"  name="file" style="width:550">
					</div>
					<label class="control-label">上传进度:</label>
					<div class="controls">
						<div  class="progress progress-success progress-striped" style="width:50%">
							<div  id = 'proBar' class="bar" style="width: 0%"></div>
						</div>
					</div>
				</div>
				
				 <div class="control-group">
					<div class="controls">
					<button type="button" id="subbut" class="btn">submit</button>
					</div>
				</div>
		</form>
		<iframe name="uploadf" style="display:none"></iframe>
</body>
</html>
<script >
$(document).ready(function(){
	$('#subbut').bind('click',
			function(){
				$('#fForm').submit();
				var eventFun = function(){
		    		$.ajax({
	    				type: 'GET',
	    				url: '../process.json',
	    				data: {},
	    				dataType: 'json',
	    				success : function(data){
		    					$('#proBar').css('width',data.rate+''+'%');
			    				$('#proBar').empty();
					    		$('#proBar').append(data.show);	
					    		if(data.rate == 100){
					    			window.clearInterval(intId);
					    		}	
	    		}});};
	    		var intId = window.setInterval(eventFun,500);
	});
});
</script>

2.java 代码

package com.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class FileUploadController {
	Logger log = Logger.getLogger(FileUploadController.class);
	
	/**
	 * upload  上传文件
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/upload.html", method = RequestMethod.POST)
	public ModelAndView upload(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		final HttpSession hs = request.getSession();
		ModelAndView mv = new ModelAndView();
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		if(!isMultipart){
			return mv;
		}
		// Create a factory for disk-based file items
		FileItemFactory factory = new DiskFileItemFactory();

		// Create a new file upload handler
		ServletFileUpload upload = new ServletFileUpload(factory);
		upload.setProgressListener(new ProgressListener(){
			   public void update(long pBytesRead, long pContentLength, int pItems) {
				   ProcessInfo pri = new ProcessInfo();
			       pri.itemNum = pItems;
			       pri.readSize = pBytesRead;
			       pri.totalSize = pContentLength;
			       pri.show = pBytesRead+"/"+pContentLength+" byte";
			       pri.rate = Math.round(new Float(pBytesRead) / new Float(pContentLength)*100);
			       hs.setAttribute("proInfo", pri);
			   }
			});
		List items = upload.parseRequest(request);
		// Parse the request
		// Process the uploaded items
//		Iterator iter = items.iterator();
//		while (iter.hasNext()) {
//		    FileItem item = (FileItem) iter.next();
//		    if (item.isFormField()) {
//		        String name = item.getFieldName();
//		        String value = item.getString();
//		        System.out.println("this is common feild!"+name+"="+value);
//		    } else {
//		    	System.out.println("this is file feild!");
//		    	 String fieldName = item.getFieldName();
//		    	    String fileName = item.getName();
//		    	    String contentType = item.getContentType();
//		    	    boolean isInMemory = item.isInMemory();
//		    	    long sizeInBytes = item.getSize();
//		    	    File uploadedFile = new File("c://"+fileName);
//		    	    item.write(uploadedFile);
//		    }
//		}
		return mv;
	}
	
	
	/**
	 * process 获取进度
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/process.json", method = RequestMethod.GET)
	@ResponseBody
	public Object process(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		return ( ProcessInfo)request.getSession().getAttribute("proInfo");
	}
	
	class ProcessInfo{
		public long totalSize = 1;
		public long readSize = 0;
		public String show = "";
		public int itemNum = 0;
		public int rate = 0;
	}
	
}










  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
可以使用Java Swing组件库中的JProgressBar来实现上文件进度条。具体实现步骤如下: 1. 创建一个JProgressBar对象,并将其添加到Swing窗口中。 2. 在上文件时,通过监听上进度来更新JProgressBar的值。 3. 当上完成后,将JProgressBar的值设置为100%。 下面是一个简单的实现示例: ```java import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; public class UploadFile extends JFrame implements ActionListener { private JProgressBar progressBar; public UploadFile() { super("上文件"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new BorderLayout()); // 创建进度条并添加到窗口中 progressBar = new JProgressBar(0, 100); progressBar.setStringPainted(true); getContentPane().add(progressBar, BorderLayout.CENTER); // 添加上文件按钮 JButton uploadButton = new JButton("上文件"); uploadButton.setActionCommand("upload"); uploadButton.addActionListener(this); getContentPane().add(uploadButton, BorderLayout.SOUTH); pack(); setLocationRelativeTo(null); } public void actionPerformed(ActionEvent e) { if ("upload".equals(e.getActionCommand())) { // 弹出文件选择对话框选择要上文件 JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showOpenDialog(this); if (result == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); uploadFile(file); } } } private void uploadFile(File file) { try { // 模拟上文件的过程 FileInputStream fis = new FileInputStream(file); long fileSize = file.length(); byte[] buffer = new byte[1024]; int bytesRead = 0; long totalBytesRead = 0; while ((bytesRead = fis.read(buffer)) != -1) { // 更新进度条的值 totalBytesRead += bytesRead; int progress = (int) (totalBytesRead * 100 / fileSize); progressBar.setValue(progress); } fis.close(); // 上完成,将进度条的值设置为100% progressBar.setValue(100); JOptionPane.showMessageDialog(this, "上完成!"); } catch (IOException e) { JOptionPane.showMessageDialog(this, "上失败:" + e.getMessage()); } } public static void main(String[] args) { UploadFile uploadFile = new UploadFile(); uploadFile.setVisible(true); } } ``` 在这个示例中,我们使用了JProgressBar来显示上文件进度,并通过模拟上文件的过程来更新进度条的值。当上完成后,我们将进度条的值设置为100%并弹出一个消息框来通知用户上完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值