导航:首页 > 编程语言 > java文件上传进度条

java文件上传进度条

发布时间:2022-09-06 09:39:43

1. 文件上传时,进度条的设计原理是什么

java为例:一般来说,上传也好,下载也好,都要用到JavaI/O。 而计算进度的原理,不就是已经传输的大小与总大小的比值嘛。 这样就简单了,就拿最基本的OutputStream来说,它的基本的写出方法为 void write(byte[] b) ,实际上写出的过程不就是通过InputStream循环读,然后OutputStream循环写嘛。 你只要事先通过File类取得文件的总大小,然后在读入或写出的循环里加一个简单的进度计算的步骤,每读取或写出一次,就将已传输大小增加b.length,求出比值,更新进度条。具体的计算间隔,可以根据循环次数或时间间隔来定。 编码上,估计要用到I/O流,File,Socket以及Thread。 因为你是使用fileupload插件,所以最好查看一下它的实现代码,已决定如何将进度功能加入其中。

2. JAVA上传文件, 利用循环把每次输入的数据存进session里面,页面上怎么显示上传进度条!

在需要显示进度条的页面上写一个ajax循环执行一个servlet 。
这个servlet的代码就是 获取你存入session里的数据,并返回给页面

3. jsp中用java实现多文件上传时如何附带显示进度条

这个要多线程实现,我私信发你吧,注意查收一下,满意就给我过了

4. java多文件上传显示进度条

使用 apache fileupload ,spring MVC jquery1.6x , bootstrap 实现一个带进度条的多文件上传,由于fileupload 的局限,暂不能实现每个上传文件都显示进度条,只能实现一个总的进度条,效果如图:

packagecom.controller;

importjava.util.List;

importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;

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

@Controller
{
Loggerlog=Logger.getLogger(FileUploadController.class);

/**
*upload上传文件
*@paramrequest
*@paramresponse
*@return
*@throwsException
*/
@RequestMapping(value="/upload.html",method=RequestMethod.POST)
publicModelAndViewupload(HttpServletRequestrequest,
HttpServletResponseresponse)throwsException{
finalHttpSessionhs=request.getSession();
ModelAndViewmv=newModelAndView();
booleanisMultipart=ServletFileUpload.isMultipartContent(request);
if(!isMultipart){
returnmv;
}
//Createafactoryfordisk-basedfileitems
FileItemFactoryfactory=newDiskFileItemFactory();

//Createanewfileuploadhandler
ServletFileUploapload=newServletFileUpload(factory);
upload.setProgressListener(newProgressListener(){
publicvoipdate(longpBytesRead,longpContentLength,intpItems){
ProcessInfopri=newProcessInfo();
pri.itemNum=pItems;
pri.readSize=pBytesRead;
pri.totalSize=pContentLength;
pri.show=pBytesRead+"/"+pContentLength+"byte";
pri.rate=Math.round(newFloat(pBytesRead)/newFloat(pContentLength)*100);
hs.setAttribute("proInfo",pri);
}
});
Listitems=upload.parseRequest(request);
//Parsetherequest
//Processtheuploadeditems
//Iteratoriter=items.iterator();
//while(iter.hasNext()){
//FileItemitem=(FileItem)iter.next();
//if(item.isFormField()){
//Stringname=item.getFieldName();
//Stringvalue=item.getString();
//System.out.println("thisiscommonfeild!"+name+"="+value);
//}else{
//System.out.println("thisisfilefeild!");
//StringfieldName=item.getFieldName();
//StringfileName=item.getName();
//StringcontentType=item.getContentType();
//booleanisInMemory=item.isInMemory();
//longsizeInBytes=item.getSize();
//FileuploadedFile=newFile("c://"+fileName);
//item.write(uploadedFile);
//}
//}
returnmv;
}


/**
*process获取进度
*@paramrequest
*@paramresponse
*@return
*@throwsException
*/
@RequestMapping(value="/process.json",method=RequestMethod.GET)
@ResponseBody
publicObjectprocess(HttpServletRequestrequest,
HttpServletResponseresponse)throwsException{
return(ProcessInfo)request.getSession().getAttribute("proInfo");
}

classProcessInfo{
publiclongtotalSize=1;
publiclongreadSize=0;
publicStringshow="";
publicintitemNum=0;
publicintrate=0;
}

}

5. java上传Excel文件,如何实现进度条显示

您好,1、开发简单,由于要定时起一个HTTP 连接去获得进度信息,因此,发生的连接请求也增多 ,另外,在低速的情况下,常常会出各种各样的BUG,网络环境的差异,还造成那个周期很 难选择。 2、开发较复杂,COMET 本身需要服务器的支持,这样TOMCAT 至少得选6.0,否则服务器长连 接,压力肯定受不了,但是,性能相对好一些,由于一次上传实际上只启动了两个HTTP 链接 请求,比起AJAX 来说,那是要少很多请求了。另外一个优点是,COMET 将使得服务器可以主 动将进度情况汇报给客户端,因此,客户端的进度条相对来说,要准确一点。 3、目前看来解决方案最好的一个了,虽然开发需要涉及到 FLASH、JAVASCRIPT、以及 JAVA 的 开发,但是代码量都不是很多,因此,复杂程度相对属于中等程度。但是FLASH 也有几个问 题:第一、浏览器 FLASH 版本兼容问题,第二、FLASH 是通过获得发送数据的进度来体现进度 条的,因此虽然不需要服务器端开发进度部分的代码,但是进度的展现有些不是很准确,经 常会有一开始速度很快,但是后面越来越慢的情况。 4、就不说了,开发肯定是最麻烦的,但是进度条效果肯定是最好的,但要给每种浏览器都 要搞个插件,还是比较痛苦的。 总结一下,希望对大家有帮助。 2 其实很麻烦的,之前试过,会有下面几个问题: 第一、服务器端一定要选择支持HTTP 长连接的服务器,否则操作系统的线程限制,会导致并 发降低。 第二、除非原来就采用的是COMET 的进度方式,否则,你要把周期获得进度的方式,改成 COMET 的方式,那很郁闷的,COMET 要服务器主动把进度信息用JAVASCRIPT 的方式发回客户端 ,所以需要把结构转化为JAVASCRIPT 调用才行。 第三、对于不同的浏览器,处理 JAVASCRIPT 的方式是不一样的,我试验的结果是,IE 会在收 到一定数量的JAVASCRIPT 之后才执行,所以虽然我在服务器端每次都调用了flush 方法,但 是界面上还是需要等一段时间才能响应。而这段时间又不好控制了,因为上传文件大小的不 一样,导致了下发的JAVASCRIPT 数量也不一样,所以基本很难达到FLASH 那样的效果。 其实如果已经决定采用flash 了,那就不需要再去修改服务器端的代码了,因为那个进度信 息服务器发不发都不会影响到代码的执行,反正FLASH 本身已经提供了进度指示了,所以, 说简单地,要改成FLASH 上传,你直接做个FLASH 客户端就好了,不需要再改服务器端了。 对了,还有一种情况需要改服务器端,那就是FLASH 上传多个文件是采用多线程上传的,因 此如果你一次上传多个文件,那就需要改服务器端了。需要在所有线程上传完成的情况下, 再去修改数据库。

6. java带参带进度条(真实)上传文件代码

思路如下:


public class MyClass extends Thread {

public JProgressBar bar = new JProgressBar();//进度条
public OutputStream os;// 通向服务器的流
public InputStream is;// 你的文件流
public long len;// 你文件的总长度

public void run() {

byte[] buff = new byte[1024];
long passedlen = 0;
try {
int mark = 0;
while (true) {
mark = is.read(buff, 0, 1024);
os.write(buff, 0, mark);
// 更新进度
passedlen += mark;
int prog = (int) ((double) passedlen / (len == 0 ? 1 : len) * 100);
// 改变进度条的value值
bar.setValue(prog);
// 结束判定
if (passedlen == len) {
break;
}
}
os.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}


7. java中的文件上传进度条原理是什么哈

先记录你要上传的文件的总大小,然后在在后台不断记录已上传文件的大小并与总文件的大小相比,比值就是进度条的进度了。

8. java上传实现百分比的进度条,怎么实现

这个你完全可以参考jQuery UI里面的
http://www.jeasyui.com/demo/main/index.php
点击demo----ProgressBar那里面完全就是一个进度条,你试试。

9. java中如何在拷贝文件时加入进度条,进度条跟文件拷贝进度一致

给你个例子,你再改进下

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
public class JprogressBar extends JFrame implements Runnable {
public JprogressBar() {
initUI();
}
private void initUI() {
btCopy = new JButton("open file....");
JButton btCancel = new JButton("cancel");
JButton btSavePath = new JButton("save Path...");
FileProgressBar = new JProgressBar(0, 100);
FileProgressBar.setPreferredSize(new Dimension(450, 15));
FileProgressBar.setBackground(Color.GREEN);
FileProgressBar.setForeground(Color.PINK);
FileProgressBar.setStringPainted(true);
FileProgressBar.setVisible(false);
openFileDialog = new JFileChooser(".");
this.setLayout(new BorderLayout());
JPanel tmpPanel1 = new JPanel();
JPanel tmpPanel2 = new JPanel();
btCopy.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Thread t = new Thread(JprogressBar.this);
t.start();
}
});
btSavePath.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
savePath = setSavePath();
}
});
btCancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
stop = true;
btCopy.setEnabled(true);
}
});
tmpPanel1.add(btCopy);
tmpPanel1.add(btSavePath);
tmpPanel1.add(btCancel);
tmpPanel2.add(FileProgressBar);
this.add(tmpPanel1, BorderLayout.NORTH);
this.add(tmpPanel2, BorderLayout.SOUTH);
this.setTitle("read and file");
this.setPreferredSize(new Dimension(450, 95));
this.pack();
Dimension cd = centerIt(this);
this.setLocation(cd.width, cd.height);
final Dimension des = this.getPreferredSize();
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
stop = true;
System.exit(0);
}
public void windowStateChanged(WindowEvent e) {
System.out.println("ss");
if (e.paramString().equals("WINDOW_STATE_CHANGED")) {
System.out.println("ss");
JprogressBar.this.setSize(des);
}
}
});
this.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
// System.out.println("ss");
// JprogressBar.this.setSize(des);
}
});
}
/*
* start read file..
*/
public void run() {
stop = false;
int c = openFileDialog.showOpenDialog(this);
if (c == JFileChooser.APPROVE_OPTION) {
try {
File selectFile = openFileDialog.getSelectedFile();
if (selectFile.equals(savePath)) {
JOptionPane.showMessageDialog(this, " \t target file and source file can't as the same !");
return;
}
if (savePath == null) {
JOptionPane.showMessageDialog(this, " \t please select a path to save file !");
return;
}
btCopy.setEnabled(false);
FileProgressBar.setVisible(true);
long size = selectFile.length();
FileProgressBar.setMaximum((int) size);
FileInputStream fin = new FileInputStream(selectFile);
FileOutputStream fout = new FileOutputStream(savePath);
byte[] buff = new byte[1024];
int s;
int count = 0;
long startTime = System.currentTimeMillis();
while ((s = fin.read(buff)) > 0 && !stop) {
count += s;
fout.write(buff, 0, s);
String str = "" + 100 * (count / (size + 0.01));
str = forMatString(str);
long endTime = System.currentTimeMillis();
String speedStr = getSpeed(count, startTime, endTime);
String remailTime = getRemailTime(count, size, startTime, endTime);
FileProgressBar.setString(" precent: " + str + " %" + " speed: " + speedStr + " " + " remail time : " + remailTime);
FileProgressBar.setValue(count);
}
fin.close();
fout.close();
if (!stop) {
JOptionPane.showMessageDialog(this, " \t file complete !");
}
stop = true;
savePath = null;
btCopy.setEnabled(true);
FileProgressBar.setValue(0);
FileProgressBar.setString("");
FileProgressBar.setVisible(false);
} catch (Exception ex) {
JOptionPane.showMessageDialog(this, "err:\n" + ex.getMessage());
}
}
}
/*
*select save file path
*/
private File setSavePath() {
File path = null;
int c = openFileDialog.showSaveDialog(this);
if (c == JFileChooser.APPROVE_OPTION) {
path = openFileDialog.getSelectedFile();
}
return path;
}
/*
* make frame center
*/
private Dimension centerIt(Component c) {
Dimension size = c.getSize();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int sH = screenSize.height;
int sW = screenSize.width;
int cW = size.width;
int cH = size.height;
return new Dimension((sW - cW) / 2, (sH - cH) / 2);
}
/*
* show file speed
*/
private String getSpeed(long readByte, long startTime, long endTime) {
long speed;
if (endTime - startTime != 0) {
speed = (readByte / (endTime - startTime)) * 1000;
if (speed > 1024 * 1024) {
return forMatString(speed / (1024 * 1024 + 0.1) + "") + " m/s";
} else if (speed > 1024) {
return forMatString(speed / (1024 + 0.1) + "") + " k/s";
} else {
return speed + " b/s";
}
} else {
return "0 b/s";
}
}
/*
* format string
*/
private String forMatString(String str) {
String values;
int index = str.indexOf(".");
values = str.substring(0, index + 3);
return values;
}
/*
* get remail time
*/
private String getRemailTime(long readByte, long totalByte, long startTime, long endTime) {
long hour;
long minute;
long second;
String h;
String m;
String s;
try {
long speed = readByte / (endTime - startTime);
long time = ((totalByte - readByte) / speed) / 1000;
hour = time / 3600;
minute = time % 3600 / 60;
second = time % 3600 % 60;
h = hour + "";
m = minute + "";
s = second + "";
if (hour < 10) {
m = "0" + minute;
}
if (minute < 10) {
m = "0" + minute;
}
if (second < 10) {
s = "0" + second;
}
return h + ":" + m + ":" + s;
} catch (Exception ex) {
return "00:00:00";
}
}
/*
* show frm
*/
public static void main(String[] args) {
JprogressBar frm = new JprogressBar();
frm.setVisible(true);
}
/*
*
*/
private JButton btCopy;
private JFileChooser openFileDialog;
private JProgressBar FileProgressBar;
private File savePath = null;
private boolean stop = false;
}

阅读全文

与java文件上传进度条相关的资料

热点内容
android伸缩控件 浏览:851
androidm3u8缓存 浏览:234
imphp开源知乎 浏览:706
清除网络通配符dos命令 浏览:837
鸿蒙系统怎么快速换回安卓 浏览:712
pdf绿色虚拟打印机 浏览:213
androidtab框架 浏览:147
java转php的时间戳 浏览:639
编译libstdc依赖 浏览:659
清算法人与原法人的区别 浏览:410
家庭装修下载什么app软件 浏览:575
美食博主用什么app拍视频 浏览:817
ipone手机如何加密微信 浏览:357
自来水加密阀阀帽 浏览:438
华为交换机dhcp配置命令 浏览:319
androidbitmap缩小 浏览:275
单片机串口控制灯 浏览:88
大讯云服务器安装视频 浏览:788
华为算法领先世界 浏览:658
linux路由重启 浏览:570