- 浏览: 243692 次
- 性别:
- 来自: 四川
文章分类
最新评论
-
coosummer:
推荐使用http://buttoncssgenerator.c ...
Button CSS 样式 -
tangshengpan:
楼主,我跟你的情况一样,有现成OCX控件,用JAVA调用,出错 ...
Java调用OCX的方法(已存在OCX) -
bushkarl:
恩,思路挺清晰的
oracle 如何解决表间大数据量的复制select into table1 from table2 -
baixiaozhe:
确实不错! 我曾用scroll实现过类似效果
flex中实现marquee效果(由下而上滚动) -
sosyi:
我的报这样的错:
Exception in thread &q ...
Java调用OCX的方法(已存在OCX)
欢迎 fengzgxing 收件箱 我的应用 我的订阅
我的参与
我的闲聊
我的圈子
我的收藏
我的博客 设置 退出
问答首页 → 问答分类: Java编程和Java企业应用 → Struts → flex前端如何上传文件到Struts2 ...
flex前端如何上传文件到Struts2的action中?
悬赏:5 发布时间:2009-04-15 提问人:mikeyzhou (初级程序员)
前言:
我在flex问答部分发了提问,但是前思后想还是觉得问题根本在struts2这里,下面附上我的代码和问题
fileupload.mxml
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns="*" creationComplete="init();">
<mx:Script>
<![CDATA[
import flash.net.FileReference;
import mx.controls.Alert;
import mx.events.CloseEvent;
import flash.events.*;
private var file:FileReference;
private function init(): void{
Security.allowDomain("*");
file = new FileReference();
file.addEventListener(ProgressEvent.PROGRESS, onProgress);
file.addEventListener(Event.SELECT, onSelect);
file.addEventListener(Event.COMPLETE, completeHandle);
}
private function completeHandle(event:Event):void{
Alert.show("恭喜你,上传成功");
}
private function upload(): void{
var noFilter:FileFilter = new FileFilter("All(*.*)", "*.*");
var imagesFilter:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.png)", "*.jpg;*.jpeg;*.png");
var docFilter:FileFilter = new FileFilter("Documents(*.pdf,*.doc,*.txt)", "*.pdf;*.doc;*.txt");
//var allTypes:Array = new Array(imageTypes);
file.browse([noFilter,imagesFilter, docFilter]);
//file.browse();
}
private function onSelect(e: Event): void{
Alert.show("上传 " + file.name + " (共 "+Math.round(file.size)+" 字节)?",
"确认上传",
Alert.YES|Alert.NO,
null,
proceedWithUpload);
}
private function onProgress(e: ProgressEvent): void{
lbProgress.text = " 已上传 " + e.bytesLoaded+ " 字节,共 " + e.bytesTotal + " 字节";
var proc: uint = e.bytesLoaded / e.bytesTotal * 100;
bar.setProgress(proc, 100);
bar.label= "当前进度: " + " " + proc + "%";
}
private function proceedWithUpload(e: CloseEvent): void{
if (e.detail == Alert.YES){
//var request: URLRequest = new URLRequest("http://localhost:8080/upload/fileUpload");
//var request: URLRequest = new URLRequest("http://localhost:8080/uploadstruts1/fileUpload.do");
var request: URLRequest = new URLRequest("http://localhost:8080/MyTianHuiWeb3.0/fileUpload.th");
try {
file.upload(request);
} catch (error:Error) {
trace("上传失败");
}
}
}
]]>
</mx:Script>
<mx:Canvas width="100%" height="100%" x="10" y="170" fontSize="15">
<mx:VBox width="100%" horizontalAlign="center">
<mx:Label id="lbProgress" text="上传"/>
<mx:ProgressBar id="bar" labelPlacement="bottom" themeColor="#F20D7A"
minimum="0" visible="true" maximum="100" label="当前进度: 0%"
direction="right" mode="manual" width="200"/>
<mx:Button label="上传文件" click="upload();"/>
</mx:VBox>
</mx:Canvas>
</mx:Application>
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns="*" creationComplete="init();">
<mx:Script>
<![CDATA[
import flash.net.FileReference;
import mx.controls.Alert;
import mx.events.CloseEvent;
import flash.events.*;
private var file:FileReference;
private function init(): void{
Security.allowDomain("*");
file = new FileReference();
file.addEventListener(ProgressEvent.PROGRESS, onProgress);
file.addEventListener(Event.SELECT, onSelect);
file.addEventListener(Event.COMPLETE, completeHandle);
}
private function completeHandle(event:Event):void{
Alert.show("恭喜你,上传成功");
}
private function upload(): void{
var noFilter:FileFilter = new FileFilter("All(*.*)", "*.*");
var imagesFilter:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.png)", "*.jpg;*.jpeg;*.png");
var docFilter:FileFilter = new FileFilter("Documents(*.pdf,*.doc,*.txt)", "*.pdf;*.doc;*.txt");
//var allTypes:Array = new Array(imageTypes);
file.browse([noFilter,imagesFilter, docFilter]);
//file.browse();
}
private function onSelect(e: Event): void{
Alert.show("上传 " + file.name + " (共 "+Math.round(file.size)+" 字节)?",
"确认上传",
Alert.YES|Alert.NO,
null,
proceedWithUpload);
}
private function onProgress(e: ProgressEvent): void{
lbProgress.text = " 已上传 " + e.bytesLoaded+ " 字节,共 " + e.bytesTotal + " 字节";
var proc: uint = e.bytesLoaded / e.bytesTotal * 100;
bar.setProgress(proc, 100);
bar.label= "当前进度: " + " " + proc + "%";
}
private function proceedWithUpload(e: CloseEvent): void{
if (e.detail == Alert.YES){
//var request: URLRequest = new URLRequest("http://localhost:8080/upload/fileUpload");
//var request: URLRequest = new URLRequest("http://localhost:8080/uploadstruts1/fileUpload.do");
var request: URLRequest = new URLRequest("http://localhost:8080/MyTianHuiWeb3.0/fileUpload.th");
try {
file.upload(request);
} catch (error:Error) {
trace("上传失败");
}
}
}
]]>
</mx:Script>
<mx:Canvas width="100%" height="100%" x="10" y="170" fontSize="15">
<mx:VBox width="100%" horizontalAlign="center">
<mx:Label id="lbProgress" text="上传"/>
<mx:ProgressBar id="bar" labelPlacement="bottom" themeColor="#F20D7A"
minimum="0" visible="true" maximum="100" label="当前进度: 0%"
direction="right" mode="manual" width="200"/>
<mx:Button label="上传文件" click="upload();"/>
</mx:VBox>
</mx:Canvas>
</mx:Application>
struts.xml
Xml代码
<package name="uploadInterceptor" extends="struts-default" namespace="">
<interceptors>
<interceptor-stack name="uploadstack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="profiling"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<!--
<interceptor-ref name="fileUpload"/>
-->
<interceptor-ref name="checkbox"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
</package>
<package name="uploadPackage" extends="uploadInterceptor" namespace="" >
<action name="fileUpload" class="fileUploadAction2" method="fileUpload"/>
</package>
<package name="uploadInterceptor" extends="struts-default" namespace="">
<interceptors>
<interceptor-stack name="uploadstack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="profiling"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<!--
<interceptor-ref name="fileUpload"/>
-->
<interceptor-ref name="checkbox"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
</package>
<package name="uploadPackage" extends="uploadInterceptor" namespace="" >
<action name="fileUpload" class="fileUploadAction2" method="fileUpload"/>
</package>
spring-action.xml
Xml代码
<bean id="fileUploadAction2" class="com.FileUploadAction2" scope="request"/>
<bean id="fileUploadAction2" class="com.FileUploadAction2" scope="request"/>
FileUploadAction2.java
Java代码
import java.io.File;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.struts2.ServletActionContext;
public class FileUploadAction2 {
public void fileUpload() {
System.out.println("Access !");
HttpServletRequest request = ServletActionContext.getRequest();
System.out.println(request.toString());
// 定义文件的上传路径
String uploadPath = "C:\\";
// 限制文件的上传大小
int maxPostSize = 100 * 1024 * 1024;
//保存文件到服务器中
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxPostSize);
try {
List fileItems = upload.parseRequest(request);
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
String name = item.getName();
System.out.println(name);
try {
item.write(new File(uploadPath + name));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
System.out.println(e.getMessage() + "结束");
}
}
}
import java.io.File;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.struts2.ServletActionContext;
public class FileUploadAction2 {
public void fileUpload() {
System.out.println("Access !");
HttpServletRequest request = ServletActionContext.getRequest();
System.out.println(request.toString());
// 定义文件的上传路径
String uploadPath = "C:\\";
// 限制文件的上传大小
int maxPostSize = 100 * 1024 * 1024;
//保存文件到服务器中
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxPostSize);
try {
List fileItems = upload.parseRequest(request);
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
String name = item.getName();
System.out.println(name);
try {
item.write(new File(uploadPath + name));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
System.out.println(e.getMessage() + "结束");
}
}
}
---------------------------------------------------------------------------------------------
描述:
我在web+servlet里面可以正常上传
我在struts1.2 action里面也可以正常上传
只需要修改一下URLRequest的指向,将fileupload.mxml编译成flash就可以进行上述2个的测试。
但是我在struts2 action里面的fileUpload方法里却得不到文件(公司项目)!
因为不知如何将flex上传的Flie和struts2的action进行绑定(是否能直接使用Struts2的fileUpload拦截器拦截文件),所以还是沿用struts1的方式写的方法,并修改了action的拦截器设置,去掉了fileUpload拦截器(不知道这样改对不对),但是依然取不到文件。
问题:
不知道如何才能在struts2的action里才能取到flex上传的文件呢???
ps:不知道怎么才能知道request里是不是有文件流?是request的某个方法吗?上面打出了request信息"org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper@173089d"但我不知道时候包含了文件……
问题补充:
我把配置改成了这样
Xml代码
<package name="uploadPackage" extends="struts-default" namespace="" >
<interceptors>
<interceptor-stack name="uploadstack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="profiling"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<!--
<interceptor-ref name="fileUpload"/>
-->
<interceptor-ref name="checkbox"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="fileUpload" class="fileUploadAction2" method="fileUpload">
<interceptor-ref name="uploadstack"/>
</action>
</package>
<package name="uploadPackage" extends="struts-default" namespace="" >
<interceptors>
<interceptor-stack name="uploadstack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="profiling"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<!--
<interceptor-ref name="fileUpload"/>
-->
<interceptor-ref name="checkbox"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="fileUpload" class="fileUploadAction2" method="fileUpload">
<interceptor-ref name="uploadstack"/>
</action>
</package>
还是不行啊
问题补充:
目前的解决办法:
之前的web.mxl
Xml代码
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>struts-default.xml,struts-plugin.xml,../conf/struts.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>struts-default.xml,struts-plugin.xml,../conf/struts.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
修改为
Xml代码
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>struts-default.xml,struts-plugin.xml,../conf/struts.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.th</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>struts-default.xml,struts-plugin.xml,../conf/struts.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.th</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
也是就是绕过了struts的拦截器,采用servlet来上传文件~
但是这并没有解决问题,而且service不能注入了,但是可以继续开发……
希望大家能针对这个问题给出其他好的答案
问题补充:
下班了,家里没搭环境,依然期待大家的回答
问题补充:
问题搞定了~但是这个方法不知道规范不规范,功能有了,大家可以参照和改进!mxml就不贴了,参照前面。
java端参照了很多人的帖子,得知,struts2 action的原理是先把文件上传到tem路径下,然后再有fileupload拦截器拦截3个参数,最后绑定到action你设置的3个参数里。
这里我flex端没有和acion绑定,但是很我把拦截器里的方法提取到我的action中,然后也可以自己绑定到action的3个属性上(我这里没有绑定,而是直接输出到了c盘),也没有判断文件大小等等,以后再完善完善,也出个贴吧。
FileUploadAction2.java
Java代码
package com;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction2 extends ActionSupport{
private File file;
private String fileContentType;
private String fileFileName;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
private final int BUFFER_SIZE = 16 * 1024;
// 自己封装的一个把源文件对象复制成目标文件对象
private void copy(File src, File dst) {
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(dst),
BUFFER_SIZE);
byte[] buffer = new byte[BUFFER_SIZE];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static boolean isNonEmpty(Object[] objArray) {
boolean result = false;
for (int index = 0; index < objArray.length && !result; index++) {
if (objArray[index] != null) {
result = true;
}
}
return result;
}
public void fileUpload() {
System.out.println("Access !");
MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper)ServletActionContext.getRequest();
// Bind allowed Files
Enumeration fileParameterNames = multiWrapper.getFileParameterNames();
while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
// get the value of this input tag
String inputName = (String) fileParameterNames.nextElement();
// get the content type
String[] contentType = multiWrapper.getContentTypes(inputName);
if (isNonEmpty(contentType)) {
// get the name of the file from the input tag
String[] fileName = multiWrapper.getFileNames(inputName);
if (isNonEmpty(fileName)) {
// Get a File object for the uploaded File
File[] files = multiWrapper.getFiles(inputName);
if (files != null) {
for (int index = 0; index < files.length; index++) {
String uploadPath = "C:\\"+fileName[index];
File dstFile = new File(uploadPath);
this.copy(files[index], dstFile);
}
}
}
}
}
// // 限制文件的上传大小
// int maxPostSize = 100 * 1024 * 1024;
//
// //保存文件到服务器中
// DiskFileItemFactory factory = new DiskFileItemFactory();
// factory.setSizeThreshold(4096);
// ServletFileUpload upload = new ServletFileUpload(factory);
// upload.setSizeMax(maxPostSize);
// try {
// List fileItems = upload.parseRequest(request);
// Iterator iter = fileItems.iterator();
// while (iter.hasNext()) {
// FileItem item = (FileItem) iter.next();
// if (!item.isFormField()) {
// String name = item.getName();
// System.out.println(name);
// try {
// item.write(new File(uploadPath + name));
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// }
// } catch (FileUploadException e) {
// e.printStackTrace();
// System.out.println(e.getMessage() + "结束");
// }
}
}
package com;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction2 extends ActionSupport{
private File file;
private String fileContentType;
private String fileFileName;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
private final int BUFFER_SIZE = 16 * 1024;
// 自己封装的一个把源文件对象复制成目标文件对象
private void copy(File src, File dst) {
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(dst),
BUFFER_SIZE);
byte[] buffer = new byte[BUFFER_SIZE];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static boolean isNonEmpty(Object[] objArray) {
boolean result = false;
for (int index = 0; index < objArray.length && !result; index++) {
if (objArray[index] != null) {
result = true;
}
}
return result;
}
public void fileUpload() {
System.out.println("Access !");
MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper)ServletActionContext.getRequest();
// Bind allowed Files
Enumeration fileParameterNames = multiWrapper.getFileParameterNames();
while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
// get the value of this input tag
String inputName = (String) fileParameterNames.nextElement();
// get the content type
String[] contentType = multiWrapper.getContentTypes(inputName);
if (isNonEmpty(contentType)) {
// get the name of the file from the input tag
String[] fileName = multiWrapper.getFileNames(inputName);
if (isNonEmpty(fileName)) {
// Get a File object for the uploaded File
File[] files = multiWrapper.getFiles(inputName);
if (files != null) {
for (int index = 0; index < files.length; index++) {
String uploadPath = "C:\\"+fileName[index];
File dstFile = new File(uploadPath);
this.copy(files[index], dstFile);
}
}
}
}
}
// // 限制文件的上传大小
// int maxPostSize = 100 * 1024 * 1024;
//
// //保存文件到服务器中
// DiskFileItemFactory factory = new DiskFileItemFactory();
// factory.setSizeThreshold(4096);
// ServletFileUpload upload = new ServletFileUpload(factory);
// upload.setSizeMax(maxPostSize);
// try {
// List fileItems = upload.parseRequest(request);
// Iterator iter = fileItems.iterator();
// while (iter.hasNext()) {
// FileItem item = (FileItem) iter.next();
// if (!item.isFormField()) {
// String name = item.getName();
// System.out.println(name);
// try {
// item.write(new File(uploadPath + name));
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// }
// } catch (FileUploadException e) {
// e.printStackTrace();
// System.out.println(e.getMessage() + "结束");
// }
}
}
我的参与
我的闲聊
我的圈子
我的收藏
我的博客 设置 退出
问答首页 → 问答分类: Java编程和Java企业应用 → Struts → flex前端如何上传文件到Struts2 ...
flex前端如何上传文件到Struts2的action中?
悬赏:5 发布时间:2009-04-15 提问人:mikeyzhou (初级程序员)
前言:
我在flex问答部分发了提问,但是前思后想还是觉得问题根本在struts2这里,下面附上我的代码和问题
fileupload.mxml
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns="*" creationComplete="init();">
<mx:Script>
<![CDATA[
import flash.net.FileReference;
import mx.controls.Alert;
import mx.events.CloseEvent;
import flash.events.*;
private var file:FileReference;
private function init(): void{
Security.allowDomain("*");
file = new FileReference();
file.addEventListener(ProgressEvent.PROGRESS, onProgress);
file.addEventListener(Event.SELECT, onSelect);
file.addEventListener(Event.COMPLETE, completeHandle);
}
private function completeHandle(event:Event):void{
Alert.show("恭喜你,上传成功");
}
private function upload(): void{
var noFilter:FileFilter = new FileFilter("All(*.*)", "*.*");
var imagesFilter:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.png)", "*.jpg;*.jpeg;*.png");
var docFilter:FileFilter = new FileFilter("Documents(*.pdf,*.doc,*.txt)", "*.pdf;*.doc;*.txt");
//var allTypes:Array = new Array(imageTypes);
file.browse([noFilter,imagesFilter, docFilter]);
//file.browse();
}
private function onSelect(e: Event): void{
Alert.show("上传 " + file.name + " (共 "+Math.round(file.size)+" 字节)?",
"确认上传",
Alert.YES|Alert.NO,
null,
proceedWithUpload);
}
private function onProgress(e: ProgressEvent): void{
lbProgress.text = " 已上传 " + e.bytesLoaded+ " 字节,共 " + e.bytesTotal + " 字节";
var proc: uint = e.bytesLoaded / e.bytesTotal * 100;
bar.setProgress(proc, 100);
bar.label= "当前进度: " + " " + proc + "%";
}
private function proceedWithUpload(e: CloseEvent): void{
if (e.detail == Alert.YES){
//var request: URLRequest = new URLRequest("http://localhost:8080/upload/fileUpload");
//var request: URLRequest = new URLRequest("http://localhost:8080/uploadstruts1/fileUpload.do");
var request: URLRequest = new URLRequest("http://localhost:8080/MyTianHuiWeb3.0/fileUpload.th");
try {
file.upload(request);
} catch (error:Error) {
trace("上传失败");
}
}
}
]]>
</mx:Script>
<mx:Canvas width="100%" height="100%" x="10" y="170" fontSize="15">
<mx:VBox width="100%" horizontalAlign="center">
<mx:Label id="lbProgress" text="上传"/>
<mx:ProgressBar id="bar" labelPlacement="bottom" themeColor="#F20D7A"
minimum="0" visible="true" maximum="100" label="当前进度: 0%"
direction="right" mode="manual" width="200"/>
<mx:Button label="上传文件" click="upload();"/>
</mx:VBox>
</mx:Canvas>
</mx:Application>
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns="*" creationComplete="init();">
<mx:Script>
<![CDATA[
import flash.net.FileReference;
import mx.controls.Alert;
import mx.events.CloseEvent;
import flash.events.*;
private var file:FileReference;
private function init(): void{
Security.allowDomain("*");
file = new FileReference();
file.addEventListener(ProgressEvent.PROGRESS, onProgress);
file.addEventListener(Event.SELECT, onSelect);
file.addEventListener(Event.COMPLETE, completeHandle);
}
private function completeHandle(event:Event):void{
Alert.show("恭喜你,上传成功");
}
private function upload(): void{
var noFilter:FileFilter = new FileFilter("All(*.*)", "*.*");
var imagesFilter:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.png)", "*.jpg;*.jpeg;*.png");
var docFilter:FileFilter = new FileFilter("Documents(*.pdf,*.doc,*.txt)", "*.pdf;*.doc;*.txt");
//var allTypes:Array = new Array(imageTypes);
file.browse([noFilter,imagesFilter, docFilter]);
//file.browse();
}
private function onSelect(e: Event): void{
Alert.show("上传 " + file.name + " (共 "+Math.round(file.size)+" 字节)?",
"确认上传",
Alert.YES|Alert.NO,
null,
proceedWithUpload);
}
private function onProgress(e: ProgressEvent): void{
lbProgress.text = " 已上传 " + e.bytesLoaded+ " 字节,共 " + e.bytesTotal + " 字节";
var proc: uint = e.bytesLoaded / e.bytesTotal * 100;
bar.setProgress(proc, 100);
bar.label= "当前进度: " + " " + proc + "%";
}
private function proceedWithUpload(e: CloseEvent): void{
if (e.detail == Alert.YES){
//var request: URLRequest = new URLRequest("http://localhost:8080/upload/fileUpload");
//var request: URLRequest = new URLRequest("http://localhost:8080/uploadstruts1/fileUpload.do");
var request: URLRequest = new URLRequest("http://localhost:8080/MyTianHuiWeb3.0/fileUpload.th");
try {
file.upload(request);
} catch (error:Error) {
trace("上传失败");
}
}
}
]]>
</mx:Script>
<mx:Canvas width="100%" height="100%" x="10" y="170" fontSize="15">
<mx:VBox width="100%" horizontalAlign="center">
<mx:Label id="lbProgress" text="上传"/>
<mx:ProgressBar id="bar" labelPlacement="bottom" themeColor="#F20D7A"
minimum="0" visible="true" maximum="100" label="当前进度: 0%"
direction="right" mode="manual" width="200"/>
<mx:Button label="上传文件" click="upload();"/>
</mx:VBox>
</mx:Canvas>
</mx:Application>
struts.xml
Xml代码
<package name="uploadInterceptor" extends="struts-default" namespace="">
<interceptors>
<interceptor-stack name="uploadstack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="profiling"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<!--
<interceptor-ref name="fileUpload"/>
-->
<interceptor-ref name="checkbox"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
</package>
<package name="uploadPackage" extends="uploadInterceptor" namespace="" >
<action name="fileUpload" class="fileUploadAction2" method="fileUpload"/>
</package>
<package name="uploadInterceptor" extends="struts-default" namespace="">
<interceptors>
<interceptor-stack name="uploadstack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="profiling"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<!--
<interceptor-ref name="fileUpload"/>
-->
<interceptor-ref name="checkbox"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
</package>
<package name="uploadPackage" extends="uploadInterceptor" namespace="" >
<action name="fileUpload" class="fileUploadAction2" method="fileUpload"/>
</package>
spring-action.xml
Xml代码
<bean id="fileUploadAction2" class="com.FileUploadAction2" scope="request"/>
<bean id="fileUploadAction2" class="com.FileUploadAction2" scope="request"/>
FileUploadAction2.java
Java代码
import java.io.File;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.struts2.ServletActionContext;
public class FileUploadAction2 {
public void fileUpload() {
System.out.println("Access !");
HttpServletRequest request = ServletActionContext.getRequest();
System.out.println(request.toString());
// 定义文件的上传路径
String uploadPath = "C:\\";
// 限制文件的上传大小
int maxPostSize = 100 * 1024 * 1024;
//保存文件到服务器中
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxPostSize);
try {
List fileItems = upload.parseRequest(request);
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
String name = item.getName();
System.out.println(name);
try {
item.write(new File(uploadPath + name));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
System.out.println(e.getMessage() + "结束");
}
}
}
import java.io.File;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.struts2.ServletActionContext;
public class FileUploadAction2 {
public void fileUpload() {
System.out.println("Access !");
HttpServletRequest request = ServletActionContext.getRequest();
System.out.println(request.toString());
// 定义文件的上传路径
String uploadPath = "C:\\";
// 限制文件的上传大小
int maxPostSize = 100 * 1024 * 1024;
//保存文件到服务器中
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxPostSize);
try {
List fileItems = upload.parseRequest(request);
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
String name = item.getName();
System.out.println(name);
try {
item.write(new File(uploadPath + name));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
System.out.println(e.getMessage() + "结束");
}
}
}
---------------------------------------------------------------------------------------------
描述:
我在web+servlet里面可以正常上传
我在struts1.2 action里面也可以正常上传
只需要修改一下URLRequest的指向,将fileupload.mxml编译成flash就可以进行上述2个的测试。
但是我在struts2 action里面的fileUpload方法里却得不到文件(公司项目)!
因为不知如何将flex上传的Flie和struts2的action进行绑定(是否能直接使用Struts2的fileUpload拦截器拦截文件),所以还是沿用struts1的方式写的方法,并修改了action的拦截器设置,去掉了fileUpload拦截器(不知道这样改对不对),但是依然取不到文件。
问题:
不知道如何才能在struts2的action里才能取到flex上传的文件呢???
ps:不知道怎么才能知道request里是不是有文件流?是request的某个方法吗?上面打出了request信息"org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper@173089d"但我不知道时候包含了文件……
问题补充:
我把配置改成了这样
Xml代码
<package name="uploadPackage" extends="struts-default" namespace="" >
<interceptors>
<interceptor-stack name="uploadstack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="profiling"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<!--
<interceptor-ref name="fileUpload"/>
-->
<interceptor-ref name="checkbox"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="fileUpload" class="fileUploadAction2" method="fileUpload">
<interceptor-ref name="uploadstack"/>
</action>
</package>
<package name="uploadPackage" extends="struts-default" namespace="" >
<interceptors>
<interceptor-stack name="uploadstack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="profiling"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<!--
<interceptor-ref name="fileUpload"/>
-->
<interceptor-ref name="checkbox"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*</param>
</interceptor-ref>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<action name="fileUpload" class="fileUploadAction2" method="fileUpload">
<interceptor-ref name="uploadstack"/>
</action>
</package>
还是不行啊
问题补充:
目前的解决办法:
之前的web.mxl
Xml代码
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>struts-default.xml,struts-plugin.xml,../conf/struts.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>struts-default.xml,struts-plugin.xml,../conf/struts.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
修改为
Xml代码
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>struts-default.xml,struts-plugin.xml,../conf/struts.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.th</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>struts-default.xml,struts-plugin.xml,../conf/struts.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.th</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
也是就是绕过了struts的拦截器,采用servlet来上传文件~
但是这并没有解决问题,而且service不能注入了,但是可以继续开发……
希望大家能针对这个问题给出其他好的答案
问题补充:
下班了,家里没搭环境,依然期待大家的回答
问题补充:
问题搞定了~但是这个方法不知道规范不规范,功能有了,大家可以参照和改进!mxml就不贴了,参照前面。
java端参照了很多人的帖子,得知,struts2 action的原理是先把文件上传到tem路径下,然后再有fileupload拦截器拦截3个参数,最后绑定到action你设置的3个参数里。
这里我flex端没有和acion绑定,但是很我把拦截器里的方法提取到我的action中,然后也可以自己绑定到action的3个属性上(我这里没有绑定,而是直接输出到了c盘),也没有判断文件大小等等,以后再完善完善,也出个贴吧。
FileUploadAction2.java
Java代码
package com;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction2 extends ActionSupport{
private File file;
private String fileContentType;
private String fileFileName;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
private final int BUFFER_SIZE = 16 * 1024;
// 自己封装的一个把源文件对象复制成目标文件对象
private void copy(File src, File dst) {
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(dst),
BUFFER_SIZE);
byte[] buffer = new byte[BUFFER_SIZE];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static boolean isNonEmpty(Object[] objArray) {
boolean result = false;
for (int index = 0; index < objArray.length && !result; index++) {
if (objArray[index] != null) {
result = true;
}
}
return result;
}
public void fileUpload() {
System.out.println("Access !");
MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper)ServletActionContext.getRequest();
// Bind allowed Files
Enumeration fileParameterNames = multiWrapper.getFileParameterNames();
while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
// get the value of this input tag
String inputName = (String) fileParameterNames.nextElement();
// get the content type
String[] contentType = multiWrapper.getContentTypes(inputName);
if (isNonEmpty(contentType)) {
// get the name of the file from the input tag
String[] fileName = multiWrapper.getFileNames(inputName);
if (isNonEmpty(fileName)) {
// Get a File object for the uploaded File
File[] files = multiWrapper.getFiles(inputName);
if (files != null) {
for (int index = 0; index < files.length; index++) {
String uploadPath = "C:\\"+fileName[index];
File dstFile = new File(uploadPath);
this.copy(files[index], dstFile);
}
}
}
}
}
// // 限制文件的上传大小
// int maxPostSize = 100 * 1024 * 1024;
//
// //保存文件到服务器中
// DiskFileItemFactory factory = new DiskFileItemFactory();
// factory.setSizeThreshold(4096);
// ServletFileUpload upload = new ServletFileUpload(factory);
// upload.setSizeMax(maxPostSize);
// try {
// List fileItems = upload.parseRequest(request);
// Iterator iter = fileItems.iterator();
// while (iter.hasNext()) {
// FileItem item = (FileItem) iter.next();
// if (!item.isFormField()) {
// String name = item.getName();
// System.out.println(name);
// try {
// item.write(new File(uploadPath + name));
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// }
// } catch (FileUploadException e) {
// e.printStackTrace();
// System.out.println(e.getMessage() + "结束");
// }
}
}
package com;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction2 extends ActionSupport{
private File file;
private String fileContentType;
private String fileFileName;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
private final int BUFFER_SIZE = 16 * 1024;
// 自己封装的一个把源文件对象复制成目标文件对象
private void copy(File src, File dst) {
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(dst),
BUFFER_SIZE);
byte[] buffer = new byte[BUFFER_SIZE];
int len = 0;
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != in) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static boolean isNonEmpty(Object[] objArray) {
boolean result = false;
for (int index = 0; index < objArray.length && !result; index++) {
if (objArray[index] != null) {
result = true;
}
}
return result;
}
public void fileUpload() {
System.out.println("Access !");
MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper)ServletActionContext.getRequest();
// Bind allowed Files
Enumeration fileParameterNames = multiWrapper.getFileParameterNames();
while (fileParameterNames != null && fileParameterNames.hasMoreElements()) {
// get the value of this input tag
String inputName = (String) fileParameterNames.nextElement();
// get the content type
String[] contentType = multiWrapper.getContentTypes(inputName);
if (isNonEmpty(contentType)) {
// get the name of the file from the input tag
String[] fileName = multiWrapper.getFileNames(inputName);
if (isNonEmpty(fileName)) {
// Get a File object for the uploaded File
File[] files = multiWrapper.getFiles(inputName);
if (files != null) {
for (int index = 0; index < files.length; index++) {
String uploadPath = "C:\\"+fileName[index];
File dstFile = new File(uploadPath);
this.copy(files[index], dstFile);
}
}
}
}
}
// // 限制文件的上传大小
// int maxPostSize = 100 * 1024 * 1024;
//
// //保存文件到服务器中
// DiskFileItemFactory factory = new DiskFileItemFactory();
// factory.setSizeThreshold(4096);
// ServletFileUpload upload = new ServletFileUpload(factory);
// upload.setSizeMax(maxPostSize);
// try {
// List fileItems = upload.parseRequest(request);
// Iterator iter = fileItems.iterator();
// while (iter.hasNext()) {
// FileItem item = (FileItem) iter.next();
// if (!item.isFormField()) {
// String name = item.getName();
// System.out.println(name);
// try {
// item.write(new File(uploadPath + name));
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// }
// } catch (FileUploadException e) {
// e.printStackTrace();
// System.out.println(e.getMessage() + "结束");
// }
}
}
发表评论
-
SpringMvc全注解配置事务会失效
2012-07-18 17:20 0如果带上事务,那么用annotation方式的事务注解和bea ... -
hibernate检索策略(连接查询)
2010-05-24 16:48 872http://qingfengxia2.blog.163.co ... -
java 正则表达示 抓取页面
2009-12-16 15:17 776http://superleo.iteye.com/blog/ ... -
struts2+spring+jpa
2009-11-07 09:34 903http://struts.apache.org/2.0.9/ ... -
Java调用OCX的方法(已存在OCX)
2009-10-23 21:18 7103公司的一个项目要求如下:客户提供了一个OCX控件,要求用jav ... -
what's the jaas?
2009-09-02 20:29 805Java Authentication Authorizati ... -
jboss portal 配置
2009-08-26 00:52 754http://wurd.iteye.com/blog/1600 ... -
tomcat负载均横
2009-08-21 11:45 960下载 http://tomcat.apache.org/do ... -
Spring Security 2 配置精讲
2009-06-26 23:47 715http://www.iteye.com/topic/3199 ...
相关推荐
flex+spring+struts2+ibatis 整合的eclipse工程,可以导入eclipse环境下直接使用,因为加入开发的jar大于了上传的最大限制,只能把jar另外打包上传,下载可以从我上传资源的lib1,lib2下载,这个工程的搭建花费了我两...
本话题将详细探讨“Flex+Java多文件上传”这一技术实现,结合提供的标签“源码”和“工具”,我们将深入理解如何利用Adobe Flex(一种RIA开发框架)与Java后台进行协同工作,实现高效的文件上传功能。 首先,Flex是...
Flex Struts2文件上传是一个常见的Web开发任务,它涉及到客户端与服务器端的数据交互,特别是涉及用户界面和后端服务之间的文件传输。Flex是Adobe开发的一个富互联网应用(RIA)框架,用于创建动态、交互式的用户...
总的来说,这个示例展示了如何使用`Flex`作为前端,结合`Servlet`(可能在`Struts`框架下)作为后端,实现多文件上传功能,并解决了常见的中文乱码问题。这对于需要构建交互性强且支持多文件上传的Web应用来说,是一...
标题中的“Flex 与 Struts2 ByteArray 数据上传”指的是在Web开发中,使用Adobe Flex作为前端客户端,通过Struts2框架在后端处理字节数组(ByteArray)数据的上传技术。Flex是一种基于Adobe Flash Player或Adobe AIR...
1. 档案上传:用户可以通过友好的界面将各种格式的文档上传到系统中,系统会自动对文件进行分类、命名和版本管理。 2. 档案检索:利用全文搜索引擎或自定义索引,用户可以快速找到所需档案,支持关键词、日期、作者...
2. **异步上传**:利用Java和Flex的通信机制,文件上传可以在后台线程进行,不会阻塞用户界面,提升用户体验。 3. **安全性**:可以添加验证规则,限制文件类型和大小,防止恶意文件上传,确保系统安全。 4. **错误...
SSH+Flex项目是一种基于Flex前端和SSH2(Spring、Struts2、Hibernate)后端框架的开发模式,结合MySql数据库,实现了一套完整的Web应用系统。这种模式常用于构建功能丰富的交互式用户界面,同时提供了强大的数据管理...
以前做.net时,用过一个FlashFileUpload.swf批量文件上传工具,很帅很简单。 网址:http://www.codeproject.com/KB/aspnet/FlashUpload.aspx 因为这个用Flex写的客户端插件公开源码,而且实现的的相当完美,在asp...
而Java作为后端语言,提供了强大的服务器端处理能力,如Spring MVC或Struts等框架可以很好地处理文件上传请求。 1. **Flex中的文件选择组件**: Flex提供了一个FileReference类,用于处理文件选择和上传。通过创建...
在多文件上传的场景下,Flex可以用于设计用户界面,包括文件选择按钮、进度条和上传状态显示等元素。 SWFUpload则是一个JavaScript和Flash相结合的文件上传插件。它利用Flash的多文件选择特性,可以在不支持HTML5的...
4. **WebApplication2**:在提供的文件列表中,"WebApplication2"可能是一个基于Java的Web应用,如Spring MVC或Struts,它可能包含了服务端处理文件上传的控制器、模型和视图。控制器接收Flex客户端的HTTP请求,模型...
在本主题中,我们将深入探讨如何使用Flex进行文件上传和下载,并解决过程中可能出现的中文乱码问题。 一、Flex文件上传 1. Flex组件:Flex中可以使用`FileReference`组件来实现文件上传。用户通过选择文件后,`...
在J2EE开发中,文件上传下载是一个常见的功能,传统的解决方案如SmartUpload和Apache的FileUpload等虽然成熟,但在Struts+Spring+Hibernate(SSH)这一流行的Java企业级应用框架下,这些工具可能显得过于复杂。...
2. **文件上传**: 文件上传是通过HTTP协议的POST请求实现的。Flex客户端通过HTTPService或WebService组件向服务器发送文件数据。文件通常以二进制流的形式发送,服务器端需要正确解析这个流以接收文件。 3. **...
1. **创建Flex前端界面**:设计一个包含文件上传控件的Flex用户界面。 2. **配置BlazeDS通道**:确保Flex前端正确配置了与服务器端通信所需的通道。 3. **实现文件上传逻辑**:在Flex端编写代码来读取文件并将其发送...
这里可能涉及到权限控制、文件上传限制以及图片格式转换等逻辑。Struts控制器处理这些业务逻辑,将结果返回给Flex前端,可能是确认图片已保存或者显示错误信息。 在前端,用户可以实时预览所拍摄的照片,这需要Flex...
- 视频上传:用户上传视频文件,后端处理存储和编码,可能涉及ffmpeg等工具。 - 视频播放:使用Flash Player或HTML5播放器,支持流媒体技术如RTMP或HLS,提供流畅的播放体验。 - 视频搜索:实现关键字搜索,可能...
7. **Struts2**:Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web开发框架,用于构建结构清晰、易于维护的Web应用。它提供了丰富的拦截器、插件机制和模板技术,简化了开发流程。 8. **WinForm**...
9. **网络硬盘(Struts 2+Hibernate+Spring实现)**:类似于云存储服务,这个系统可能包括文件上传、下载、共享和权限管理等功能,展示了Java EE技术栈在构建企业级服务方面的实力。 10. **基于ASP.NET的工作流批核...