flex文件上传1
来源:互联网 发布:淘宝达人在哪里 编辑:程序博客网 时间:2024/05/21 10:51
Flex+Java文件上传 2009-12-16 09:17:07| 分类: 项目工具的使用 | 标签: |字号大中小 订阅 .
在研究Flex DataGrid导入excel时,用到了Flex的文件上传功能。 (参见我的Blog:http://cwfmaker.javaeye.com/blog/539449) 在Adobe的Flex RIA编程环境下,是无法读取本地文件的(据我所知),但是我们可以依赖于Flex调用后台的代码实现文件上传功能,我这里是利用Flex的URLRequest来向java的Servlet传送一个Http请求(Servlet集成自HttpServlet ,已实现文件上传功能),而Servlet响应请求之后会利用Apcahe的开源Jar包(org.apache.commons.fileupload.servlet.ServletFileUpload类)完成文件的生成。 通过以上原理就可以利用Flex+java实现文件上传。(这里也是参考了网上的一些文章)
java Servlet 代码
Java代码
1.package com.yyhy.java.util;
2.
3.//多文件上传的Java端的类 4.import javax.servlet.http.HttpServlet; 5.import javax.servlet.http.HttpServletRequest; 6.import javax.servlet.http.HttpServletResponse; 7.import javax.servlet.ServletException; 8.import java.util.List; 9.import java.util.Iterator; 10.import java.io.File; 11.import java.io.IOException; 12.import java.io.UnsupportedEncodingException; 13.import java.net.URLDecoder; 14.import org.apache.commons.fileupload.FileUploadException; 15.import org.apache.commons.fileupload.disk.DiskFileItemFactory; 16.import org.apache.commons.fileupload.servlet.ServletFileUpload; 17.import org.apache.commons.fileupload.FileItem; 18.import org.apache.log4j.Logger; 19.import org.apache.commons.lang.ObjectUtils; 20.import org.springframework.context.ApplicationContext; 21.import org.springframework.context.support.ClassPathXmlApplicationContext; 22.
23.
24.public class FileUploadAction extends HttpServlet { 25.
26. // 限制文件的上传大小 27. private int maxPostSize = 100 * 1024 * 1024; 28. //文件上传地址 29. private String uploadPath; 30.
31. public FileUploadAction() { 32. //从配置文件中取得文件上传地址 33. setUploadPath();
34. }
35. public String getUploadPath() { 36. return uploadPath; 37. }
38. public void setUploadPath() { 39. //从配置文件中取得文件上传地址 40. ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 41. ServerAddress serverAddressBean=(ServerAddress)context.getBean("ServerAddressBean"); 42. this.uploadPath = serverAddressBean.getUploadPath().trim(); 43. }
44. // 文件上传 45. public void service(HttpServletRequest request, HttpServletResponse response) 46. throws ServletException 47. {
48. this.doUploadAdd(request, response); 49. }
50.
51. private void logger(String info) { 52. System.out.println(info);
53. }
54.
55. protected void doGet(HttpServletRequest request, HttpServletResponse response) 56. throws ServletException, IOException { 57. doUploadAdd(request, response);
58. }
59.
60. protected void doPost(HttpServletRequest request, HttpServletResponse response) 61. throws ServletException, IOException { 62. doUploadAdd(request, response);
63. }
64.
65. private void doUploadAdd(HttpServletRequest request, 66. HttpServletResponse response) throws ServletException { 67. logger("begin to upload"); 68. try { 69. request.setCharacterEncoding("UTF-8");// 防止文件名称带有汉字后传到服务器乱码 70. //建立文件夹 71. this.makeDir(uploadPath); 72. } catch (UnsupportedEncodingException e) { 73. // TODO Auto-generated catch block 74. e.printStackTrace();
75. }
76. saveFiletoServer(request,response,uploadPath);
77. }
78.
79. private void doUploadDelete(HttpServletRequest request,HttpServletResponse response) throws ServletException 80. {
81. String dirtyStr = "";//需要删除的文件名(单个文件)或文件夹名列表 82. try 83. {
84. if (request.getParameter("dirtyStr") != null) { 85. dirtyStr=URLDecoder.decode(request.getParameter("dirtyStr"),"utf-8");//前台ENCODE,后台DECODE 86. logger("删除的文件(夹)为:" + dirtyStr); 87. }
88. }
89. catch (Exception e) { 90. // TODO Auto-generated catch block 91. logger(e.getMessage());
92. }
93.
94. try { 95. new DeleteFiles().DeleteModifyFiles(dirtyStr, uploadPath); 96. } catch (Exception e) { 97. logger(e.getMessage());
98. }
99. }
100. //保存文件到服务器中 101. private void saveFiletoServer(HttpServletRequest request,HttpServletResponse response,String uploadPath) 102. {
103. // 操作文件 104. response.setContentType("text/html; charset=UTF-8"); 105. DiskFileItemFactory factory = new DiskFileItemFactory(); 106. factory.setSizeThreshold(1024 * 4); 107. ServletFileUpload upload = new ServletFileUpload(factory); 108. upload.setFileSizeMax(maxPostSize);
109. logger("request========" + ObjectUtils.toString(request)); 110. List fileItems = null; 111. try { 112. fileItems = upload.parseRequest(request);
113. logger("============" + ObjectUtils.toString(fileItems)); 114. Iterator iter = fileItems.iterator();
115. while (iter.hasNext()) { 116. FileItem item = (FileItem) iter.next();
117. log(item.toString());
118. if (!item.isFormField()) { 119. String name = item.getName();
120. logger("上传的文件名 = " + name); 121. try { 122. item.write(new File(uploadPath + name)); 123. } catch (Exception ex) { 124. logger(ex.getMessage());
125. }
126. }
127. }
128. } catch (FileUploadException ex1) { 129. logger("FileUploadException->" + ex1.getMessage()); 130. }
131. }
132. // 建立文件夹路径 133. private boolean makeDir(String uploadPath) { 134. boolean isOK = false; 135. try { 136. File file = new File(uploadPath); 137. file.mkdirs();
138. isOK = true; 139. } catch (Exception e) { 140. isOK = false; 141. } finally { 142. return isOK; 143. }
144. }
145. // 建立文件夹路径 146. private boolean makeDirs(String uploadPath, String newDocStr) { 147. boolean isOK = false; 148. File file;
149. String[] temp;
150. try { 151. temp = newDocStr.split(","); 152. for (int i = 0; i < temp.length; i++) { 153. file = new File(uploadPath + temp[i] + "\\"); 154. file.mkdirs();
155. }
156. isOK = true; 157. } catch (Exception e) { 158. isOK = false; 159. } finally { 160. return isOK; 161. }
162. }
163.}
package com.yyhy.java.util;
//多文件上传的Java端的类
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.util.List;
import java.util.Iterator;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.log4j.Logger;
import org.apache.commons.lang.ObjectUtils;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class FileUploadAction extends HttpServlet {
// 限制文件的上传大小
private int maxPostSize = 100 * 1024 * 1024;
//文件上传地址
private String uploadPath;
public FileUploadAction() {
//从配置文件中取得文件上传地址
setUploadPath();
}
public String getUploadPath() {
return uploadPath;
}
public void setUploadPath() {
//从配置文件中取得文件上传地址
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
ServerAddress serverAddressBean=(ServerAddress)context.getBean("ServerAddressBean");
this.uploadPath = serverAddressBean.getUploadPath().trim();
}
// 文件上传
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException
{
this.doUploadAdd(request, response);
}
private void logger(String info) {
System.out.println(info);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doUploadAdd(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doUploadAdd(request, response);
}
private void doUploadAdd(HttpServletRequest request,
HttpServletResponse response) throws ServletException {
logger("begin to upload");
try {
request.setCharacterEncoding("UTF-8");// 防止文件名称带有汉字后传到服务器乱码
//建立文件夹
this.makeDir(uploadPath);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
saveFiletoServer(request,response,uploadPath);
}
private void doUploadDelete(HttpServletRequest request,HttpServletResponse response) throws ServletException
{
String dirtyStr = "";//需要删除的文件名(单个文件)或文件夹名列表
try
{
if (request.getParameter("dirtyStr") != null) {
dirtyStr=URLDecoder.decode(request.getParameter("dirtyStr"),"utf-8");//前台ENCODE,后台DECODE
logger("删除的文件(夹)为:" + dirtyStr);
}
}
catch (Exception e) {
// TODO Auto-generated catch block
logger(e.getMessage());
}
try {
new DeleteFiles().DeleteModifyFiles(dirtyStr, uploadPath);
} catch (Exception e) {
logger(e.getMessage());
}
}
//保存文件到服务器中
private void saveFiletoServer(HttpServletRequest request,HttpServletResponse response,String uploadPath)
{
// 操作文件
response.setContentType("text/html; charset=UTF-8");
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024 * 4);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(maxPostSize);
logger("request========" + ObjectUtils.toString(request));
List fileItems = null;
try {
fileItems = upload.parseRequest(request);
logger("============" + ObjectUtils.toString(fileItems));
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
log(item.toString());
if (!item.isFormField()) {
String name = item.getName();
logger("上传的文件名 = " + name);
try {
item.write(new File(uploadPath + name));
} catch (Exception ex) {
logger(ex.getMessage());
}
}
}
} catch (FileUploadException ex1) {
logger("FileUploadException->" + ex1.getMessage());
}
}
// 建立文件夹路径
private boolean makeDir(String uploadPath) {
boolean isOK = false;
try {
File file = new File(uploadPath);
file.mkdirs();
isOK = true;
} catch (Exception e) {
isOK = false;
} finally {
return isOK;
}
}
// 建立文件夹路径
private boolean makeDirs(String uploadPath, String newDocStr) {
boolean isOK = false;
File file;
String[] temp;
try {
temp = newDocStr.split(",");
for (int i = 0; i < temp.length; i++) {
file = new File(uploadPath + temp[i] + "\\");
file.mkdirs();
}
isOK = true;
} catch (Exception e) {
isOK = false;
} finally {
return isOK;
}
}
}
Flex前台代码:
Actionscript代码
1.<?xml version="1.0" encoding="utf-8"?>
2.<mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 3. xmlns:s="library://ns.adobe.com/flex/spark" 4. xmlns:mx="library://ns.adobe.com/flex/halo" layout="absolute" width="400" height="300" 5. creationComplete="CreationCompletedHandler()" 6. showCloseButton="true"> 7. <fx:Script>
8. <![CDATA[
9. import mx.controls.Alert;
10. import mx.events.CloseEvent;
11. import mx.managers.PopUpManager;
12. import mx.utils.StringUtil;
13.
14. [Bindable]
15. private var _filename:String;
16.
17. public function get filename():String
18. {
19. return _filename;
20. }
21.
22. public function set filename(value:String):void
23. {
24. _filename = value;
25. }
26.
27.
28. [Bindable]
29. private var _file:FileReference=new FileReference();
30.
31. public function get file():FileReference
32. {
33. return _file;
34. }
35.
36. public function set file(value:FileReference):void
37. {
38. _file = value;
39. }
40.
41.
42. [Bindable]
43. private var _serveraddress:String;
44.
45. public function get serveraddress():String
46. {
47. return _serveraddress;
48. }
49.
50. public function set serveraddress(value:String):void
51. {
52. _serveraddress = value;
53. }
54.
55. /**creationComplete完成之后调用,获取服务器地址,建立事件监听
56. * @param null
57. * @author 陈文锋 54cwf@163.com 58. * @return void
59. * */
60. public function CreationCompletedHandler():void
61. {
62. Security.allowDomain("*"); 63. var urlLoader:URLLoader=new URLLoader(new URLRequest("assets/conf/ServerAddressConfig.xml")); 64. urlLoader.addEventListener(Event.COMPLETE,CompletedHandler);
65. this.addEventListener(Event.CLOSE,TitleWindowClose);
66. file.addEventListener(ProgressEvent.PROGRESS,progressHandler);
67. file.addEventListener(Event.SELECT,selectedHandler);
68. file.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
69. }
70.
71. private function ioErrorHandler(e:IOErrorEvent):void
72. {
73. Alert.show(e.toString());
74. }
75.
76. private function progressHandler(e:ProgressEvent):void
77. {
78. lblProgress.text = " 已上传 " + e.bytesLoaded 79. + " 字节,共 " + e.bytesTotal + " 字节"; 80. var proc: uint = e.bytesLoaded / e.bytesTotal * 100; 81. uploadbar.setProgress(proc, 100); 82. uploadbar.label= "当前进度: " + " " + proc + "%"; 83. }
84.
85. /**Event事件监听处理函数,弹出上传提示窗口
86. * @param e,Event类型事件参数
87. * @author 54cwf@163.com 88. * @return void
89. * */
90. private function selectedHandler(e:Event):void
91. {
92. Alert.show("上传 " + file.name + " (共 "+Math.round(file.size/1024)+"KB)?", 93. "确认上传", 94. Alert.YES|Alert.NO,
95. null,
96. proceedWithUpload);
97. }
98.
99. /**CloseEvent事件监听处理函数,访问upload的servlet服务
100. * @param e,Event类型事件参数
101. * @author 54cwf@163.com 102. * @return void
103. * */
104. private function proceedWithUpload(e:CloseEvent): void{
105. if (e.detail == Alert.YES)
106. {
107. filename=file.name;
108. var request:URLRequest = new URLRequest(StringUtil.trim(serveraddress));
109. try
110. {
111. file.upload(request);
112. }
113. catch (error:Error)
114. {
115. Alert.show("上传失败","错误"); 116. }
117.
118. }
119. }
120.
121. private function upload(): void{
122. var typefiter:FileFilter=new FileFilter("Excel","*.xls"); 123. file.browse([typefiter]);
124. }
125.
126. /**CloseEvent事件监听处理函数,关闭TitleWindow弹出窗口
127. * @param e,事件参数
128. * @author 54cwf@163.com 129. * @return void
130. * */
131. private function TitleWindowClose(e:CloseEvent):void
132. {
133. PopUpManager.removePopUp(this);
134. }
135.
136. /**Event事件监听处理函数,获取配置文件的文件上传路径
137. * @param e,事件参数
138. * @author 54cwf@163.com 139. * @return void
140. * */
141. private function CompletedHandler(e:Event):void
142. {
143. var configurationxml:XML=XML((URLLoader(e.target).data));
144. serveraddress=configurationxml.filesinservername;
145. }
146. ]]>
147. </fx:Script>
148. <mx:Canvas width="100%" height="100%"> 149. <mx:VBox width="100%" horizontalAlign="center"> 150. <mx:Label id="lblProgress" text="上传"/> 151. <mx:ProgressBar id="uploadbar" labelPlacement="bottom" themeColor="#F20D7A" 152. minimum="0" visible="true" maximum="100" label="当前进度: 0%" 153. direction="right" mode="manual" width="200"/> 154. <mx:Button label="上传文件" click="upload()"/> 155. </mx:VBox>
156. </mx:Canvas>
157.</mx:TitleWindow>
<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo" layout="absolute" width="400" height="300"
creationComplete="CreationCompletedHandler()"
showCloseButton="true">
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.CloseEvent;
import mx.managers.PopUpManager;
import mx.utils.StringUtil;
[Bindable]
private var _filename:String;
public function get filename():String
{
return _filename;
}
public function set filename(value:String):void
{
_filename = value;
}
[Bindable]
private var _file:FileReference=new FileReference();
public function get file():FileReference
{
return _file;
}
public function set file(value:FileReference):void
{
_file = value;
}
[Bindable]
private var _serveraddress:String;
public function get serveraddress():String
{
return _serveraddress;
}
public function set serveraddress(value:String):void
{
_serveraddress = value;
}
/**creationComplete完成之后调用,获取服务器地址,建立事件监听
* @param null
* @author 陈文锋 54cwf@163.com
* @return void
* */
public function CreationCompletedHandler():void
{
Security.allowDomain("*");
var urlLoader:URLLoader=new URLLoader(new URLRequest("assets/conf/ServerAddressConfig.xml"));
urlLoader.addEventListener(Event.COMPLETE,CompletedHandler);
this.addEventListener(Event.CLOSE,TitleWindowClose);
file.addEventListener(ProgressEvent.PROGRESS,progressHandler);
file.addEventListener(Event.SELECT,selectedHandler);
file.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
}
private function ioErrorHandler(e:IOErrorEvent):void
{
Alert.show(e.toString());
}
private function progressHandler(e:ProgressEvent):void
{
lblProgress.text = " 已上传 " + e.bytesLoaded
+ " 字节,共 " + e.bytesTotal + " 字节";
var proc: uint = e.bytesLoaded / e.bytesTotal * 100;
uploadbar.setProgress(proc, 100);
uploadbar.label= "当前进度: " + " " + proc + "%";
}
/**Event事件监听处理函数,弹出上传提示窗口
* @param e,Event类型事件参数
* @author 54cwf@163.com
* @return void
* */
private function selectedHandler(e:Event):void
{
Alert.show("上传 " + file.name + " (共 "+Math.round(file.size/1024)+"KB)?",
"确认上传",
Alert.YES|Alert.NO,
null,
proceedWithUpload);
}
/**CloseEvent事件监听处理函数,访问upload的servlet服务
* @param e,Event类型事件参数
* @author 54cwf@163.com
* @return void
* */
private function proceedWithUpload(e:CloseEvent): void{
if (e.detail == Alert.YES)
{
filename=file.name;
var request:URLRequest = new URLRequest(StringUtil.trim(serveraddress));
try
{
file.upload(request);
}
catch (error:Error)
{
Alert.show("上传失败","错误");
}
}
}
private function upload(): void{
var typefiter:FileFilter=new FileFilter("Excel","*.xls");
file.browse([typefiter]);
}
/**CloseEvent事件监听处理函数,关闭TitleWindow弹出窗口
* @param e,事件参数
* @author 54cwf@163.com
* @return void
* */
private function TitleWindowClose(e:CloseEvent):void
{
PopUpManager.removePopUp(this);
}
/**Event事件监听处理函数,获取配置文件的文件上传路径
* @param e,事件参数
* @author 54cwf@163.com
* @return void
* */
private function CompletedHandler(e:Event):void
{
var configurationxml:XML=XML((URLLoader(e.target).data));
serveraddress=configurationxml.filesinservername;
}
]]>
</fx:Script>
<mx:Canvas width="100%" height="100%">
<mx:VBox width="100%" horizontalAlign="center">
<mx:Label id="lblProgress" text="上传"/>
<mx:ProgressBar id="uploadbar" 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:TitleWindow>
- flex文件上传1
- flex 文件上传
- Flex + servlet 上传文件
- flex+php文件上传
- flex 多文件上传
- flex上传文件
- Flex文件上传
- Flex FTP文件上传
- flex +jsp 文件上传
- flex多文件上传
- FLEX文件上传
- Flex文件上传
- flex+struts2上传文件
- Flex 文件上传
- Flex多文件上传
- Flex上传单个文件
- flex 上传文件预览
- Flex 中的上传文件
- 使用busybox制作Linux根文件系统
- YSLOW法则中,为什么yahoo推荐用GET代替POST?
- Linux下常用配置文件及常用命令介绍
- Excel多个工作表(Sheet)合并
- 使用代理实现对私有方法的访问
- flex文件上传1
- Framwork增加资源后更新public.xml 和current.xml
- 如何修改并读取StatusBar的内容
- 借助 C++ 进行 Windows 开发
- Tomcat压力优化
- flex2
- CodeForces 103D
- Struts2 搭建开发环境
- flex3