JAVA文件上传进度条(java文件上传进度条 spring)

http://www.itjxue.com  2023-02-14 18:55  来源:未知  点击次数: 

java web断点续传,我用的是fileupload来做的上传。

使用Struts2上传文件:

Struts文件上传需要使用File Upload Filter。Filter Upload Filter使用一些默认的规则:

Form中的s:file name="image"/s:file标签对应着Action类中的三个属性分别是:上传文件(java.io.File类型),文件名(java.lang.String类型),文件类型(java.lang.String类型,例如:image/jpeg)。命名规约为:

文件:名字与s:file标签中的name属性一致,这里为:image

文件名:文件 + FileName,这里为:imageFileName

文件类型:文件 + ContentType,这里为:imageContentType

所以针对上述s:file name="image"/s:file表示啊的上传文件的JSP和Action类被别为:

imageUpload.jsp:

[html]?view plain?copy

%@?page?contentType="text/html;charset=UTF-8"?language="java"?%

%@taglib?prefix="s"?uri="/struts-tags"?%

html

headtitleImage?Upload/title/head

body

h1?Image?Upload?Page?/h1

s:form?action="imageUpload"?method="post"?enctype="multipart/form-data"

s:file?name="image"/s:file

s:submit/s:submit

/s:form

/body

/html

ImageUploadAction.java:

[html]?view plain?copy

package?com.jpleasure;

import?com.opensymphony.xwork2.ActionSupport;

import?java.io.File;

import?java.io.InputStream;

import?java.io.FileInputStream;

import?java.io.FileNotFoundException;

public?class?ImageUploadAction?extends?ActionSupport?{

private?File?image;

private?String?imageFileName;

private?String?imageContentType;

public?File?getImage()?{

return?image;

}

public?void?setImage(File?image)?{

this.image?=?image;

}

public?String?getImageFileName()?{

return?imageFileName;

}

public?void?setImageFileName(String?imageFileName)?{

this.imageFileName?=?imageFileName;

}

public?String?getImageContentType()?{

return?imageContentType;

}

public?void?setImageContentType(String?imageContentType)?{

this.imageContentType?=?imageContentType;

}

public?String?execute()?{

if?(image?!=?null)?{

System.out.println("file?name?is:"?+?this.imageFileName);

System.out.println("file?content?type?is:"?+?this.imageContentType);

System.out.println("file?length?is:"?+?this.image.length());

}

return?SUCCESS;

}

}

Struts.xml配置文件:

[html]?view plain?copy

action?name="imageUpload"?class="com.jpleasure.ImageUploadAction"

result/success.jsp/result

/action

这样当我们选中上传文件,提交的时候:文件内容会以File类型的方式放在image声明的变量中。文件的名字将会被放在imageFileName命名的变量中,文件的类型被放在imageContentType命名的变量中。

文件下载:

文件下载需要使用一个特殊的Result,stream类型的Result。Stream类型的Result主要用来处理文件下载操作。

处理原理为:所有的下载文件都是将一个二进制的流写入到HttpResponse中去。在Action类中定义一个InputSream类型的二进制流,在Result返回给用户的时候返回给用户。

扩展上述的代码,将上传来的文件直接下载给用户:

ImageUploadAction中需要追加一个InputSream类型的对象,并且指向上传的文件,代码如下,红色部分表示变化:

[html]?view plain?copy

package?com.jpleasure;

import?com.opensymphony.xwork2.ActionSupport;

import?java.io.File;

import?java.io.InputStream;

import?java.io.FileInputStream;

import?java.io.FileNotFoundException;

public?class?ImageUploadAction?extends?ActionSupport?{

private?File?image;

private?String?imageFileName;

private?String?imageContentType;

private?InputStream?imageInputStream?=?null;

public?InputStream?getImageInputStream()?{

return?imageInputStream;

}

public?void?setImageInputStream(InputStream?imageInputStream)?{

this.imageInputStream?=?imageInputStream;

}

public?File?getImage()?{

return?image;

}

public?void?setImage(File?image)?{

this.image?=?image;

}

public?String?getImageFileName()?{

return?imageFileName;

}

public?void?setImageFileName(String?imageFileName)?{

this.imageFileName?=?imageFileName;

}

public?String?getImageContentType()?{

return?imageContentType;

}

public?void?setImageContentType(String?imageContentType)?{

this.imageContentType?=?imageContentType;

}

public?String?execute()?{

if?(image?!=?null)?{

System.out.println("file?name?is:"?+?this.imageFileName);

System.out.println("file?content?type?is:"?+?this.imageContentType);

System.out.println("file?length?is:"?+?this.image.length());

try?{

this.imageInputStream?=?new?FileInputStream?(image);

}?catch?(FileNotFoundException?e)?{

e.printStackTrace();

}

}

return?SUCCESS;

}

}

配置文件为,红色为变化部分:

[html]?view plain?copy

action?name="imageUpload"?class="com.jpleasure.ImageUploadAction"

result?name="success"?type="stream"

param?name="contentType"image/pjpeg/param

param?name="inputName"imageInputStream/param

param?name="contentDisposition"attachment;filename="image.jpg"/param

param?name="bufferSize"1024/param

/result

/action

ContentType表示下载文件的类型。

InputName表示Action类中用来下载文件的字段的名字。

ContentDisposition用来控制文件下载的一些信息,包括是否打开另存对话框,下载文件名等。

BufferSize表示文件下载时使用的缓冲区的大小。

实际项目开发的考虑:

控制上传文件的类型和最大允许上传文件的size

使用File Upload Intercepter的参数可盈控制上传文件的类型和最大允许上传文件的size。例如:

[html]?view plain?copy

struts

package?name="myPackage"?extends="struts-default"

interceptor-ref?name="fileUpload"

param?name="maximumSize"2MB/param

param?name="allowedTypes"text/html,image/jpeg/param

/interceptor-ref

interceptor-ref?name="basicStack"/

action?name="imageUpload"?class="com.jpleasure.ImageUploadAction"

result?name="success"?type="stream"

param?name="contentType"image/pjpeg/param

param?name="inputName"imageInputStream/param

param?name="contentDisposition"

attachment;filename="image.jpg"

/param

param?name="bufferSize"1024/param

/result

/action

/package

/struts

上述表示允许上传jpeg和html类型的文件,且最大文件上传size为2MB

显示错误信息:

可以使用如下key表示的message来显示文件上传出错的提示信息:

消息Key ? ?说明 ?

struts.messages.error.uploading ? ?文件无法正常上传时的公共错误 ?

struts.messages.error.file.too.large ? ?文件大小超过最大允许size时的错误提示 ?

struts.messages.error.content.type.not.allowed ? ?文件类型不在上传文件允许类型中的错误提示 ?

请教Java怎样实现跨服务器文件上传

你好!

另一台机器也要有处理文件上传的WEB程序,你可以参考Stream上传插件(支持HTML5和Flash两种方式上传)

Stream 上传插件

Stream 是解决不同浏览器上传文件的插件,是Uploadify的Flash版和Html5版的结合!

Stream 简介

Stream 是根据某网的文件上传插件加工而来,支持不同平台(Windows, Linux, Mac, Android, iOS)下,主流浏览器(IE7+, Chrome, Firefox, Safari, 其他)的上传工作,当然在Html5标准下,还支持文件的断点续传功能,有效解决大文件的Web上传问题!

主要特征

1. 源码完全开放,目前有Java、PHP、Perl三种后台语言实现

2. 支持HTML5、Flash两种方式(跨域)上传

3. 多文件一起上传

4. HTML5支持断点续传,拖拽等新特性

5. 兼容性好IE7+, FF3.6+, Chrome*,Safari4+,遨游等主流浏览器

6. 进度条、速度、剩余时间等附属信息

7. `选择文件的按钮`可以自定义

8. 简单的参数配置实现 灵活多变的功能

9. 支持文件夹上传(Chrome21+, Opera15+)

10. 支持自定义UI(V1.4+)

指定跨域上传就可以了

这些都是小鸟云的工程师告诉我的,建议你可以试试小鸟云

G.ho.st网盘,如何使用JAVA批量上传文件?

很简单。在左边一栏,用鼠标点击你要上传的文件夹,按住鼠标左键不放,拖动文件夹到右边一栏,也就是网盘一栏指定位置,电脑就自动就开始上传了。我就是用这种方法上传文件的。

java web 服务器端执行的进度条

开始页面:start.jsp

%@ page contentType="text/html; charset=GBK" %

% session.removeAttribute("task"); %

jsp:useBean id="task" scope="session" class="progress.TaskBean"/

% task.setRunning(true); %

% new Thread(task).start(); %

jsp:forward page="status.jsp"/

状态页面:status.jsp

%@ page contentType="text/html; charset=GBK" %

jsp:useBean id="task" scope="session" class="progress.TaskBean"/

HTML

HEAD

TITLEJSP进度条/TITLE

% if (task.isRunning()) { %

script type="" LANGUAGE="JavaScript"

setTimeout("location='status.jsp'", 1000);

/script

% } %

/HEAD

bODY bgcolor=""

H1 ALIGN="CENTER"JSP进度条/H1

H2 ALIGN="CENTER"

结果: %= task.getResult() %BR

% int percent = task.getPercent(); %

%= percent %%

/H2

TABLE WIDTH="60%" ALIGN="CENTER"

CELLPADDING=0 CELLSPACING=2

TR

% for (int i = 10; i = percent; i += 10) { %

TD WIDTH="10%" height="10" BGCOLOR="red" /TD

% } %

% for (int i = 100; i percent; i -= 10) { %

TD WIDTH="10%" /TD

% } %

/TR

/TABLE

TABLE WIDTH="100%" BORDER=0 CELLPADDING=0 CELLSPACING=0

TR

TD ALIGN="CENTER"

% if (task.isRunning()) { %

正在执行

% } else { %

% if (task.isCompleted()) { %

完成

% } else if (!task.isStarted()) { %

尚未开始

% } else { %

已停止

% } %

% } %

/TD

/TR

TR

TD ALIGN="CENTER"

BR

% if (task.isRunning()) { %

FORM METHOD="GET" ACTION="stop.jsp"

INPUT TYPE="SUBMIT" ="停止"

/FORM

% } else { %

FORM METHOD="GET" ACTION="start.jsp"

INPUT TYPE="SUBMIT" ="开始"

/FORM

% } %

/TD

/TR

/TABLE

/BODY/HTML

停止页面:stop.jsp

%@ page contentType="text/html; charset=GBK" %

jsp:useBean id="task" scope="session" class="progress.TaskBean"/

% task.setRunning(false); %

jsp:forward page="status.jsp"/

业务逻辑bean:TaskBean.java

package progress;

import java.io.Serializable;

public class TaskBean

implements Runnable, Serializable {

private int counter;

private int sum;

private boolean started;

private boolean running;

private int sleep;

public TaskBean() {

counter = 0;

sum = 0;

started = false;

running = false;

sleep = 100;

}

protected void work() {

try {

Thread.sleep(sleep);

counter++;

sum += counter;

}

catch (InterruptedException e) {

setRunning(false);

}

}

public synchronized int getPercent() {

return counter;

}

public synchronized boolean isStarted() {

return started;

}

public synchronized boolean isCompleted() {

return counter == 100;

}

public synchronized boolean isRunning() {

return running;

}

public synchronized void setRunning(boolean running) {

this.running = running;

if (running) {

started = true;

}

}

public synchronized Object getResult() {

if (isCompleted()) {

return new Integer(sum);

}

else {

return null;

}

}

public void run() {

try {

setRunning(true);

while (isRunning() !isCompleted()) {

work();

}

}

finally {

setRunning(false);

}

}

}

(责任编辑:IT教学网)

更多

推荐图片影音文章