转自:http://wangcheng.iteye.com/blog/175146
使用Flex + Java实现文件上传
Flex主要使用FileReference,代码如下
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
- creationComplete="init()">
- <mx:Script>
- [CDATA[
- private const defaultRequestUrl : String = "http://localhost:8080/flexFileUploadServer/uploadServlet.do";
- private var file : FileReference;
- private function init():void {
- Security.allowDomain("*");
- file = new FileReference();
- file.addEventListener(Event.SELECT, onFileSelect);
- file.addEventListener(ProgressEvent.PROGRESS, progressHandle);
- file.addEventListener(Event.COMPLETE, completeHandle);
- //file.addEventListener(Event.OPEN, openHandle);
- //file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
- //file.addEventListener(Event.CANCEL, cancelHandler);
- }
- private function onClickBrowserBtn() : void {
- file.browse(getTypeFilter());
- }
- private function getTypeFilter() : Array {
- var imagesFilter:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png");
- //var docFilter:FileFilter = new FileFilter("Documents", "*.pdf;*.doc;*.txt");
- return [imagesFilter];
- }
- private function onFileSelect(event : Event) : void {
- uploadBtn.enabled = true;
- infoText.htmlText =
- "Name: " + file.name + "<br/>" +
- "Size: " + file.size + "<br/>" +
- "Type: " + file.type + "<br/>" +
- "Date: " + file.creationDate;
- }
- private function onClickUploadBtn() : void {
- var request : URLRequest = new URLRequest(defaultRequestUrl);
- request.data = "userId=123";
- file.upload(request);
- }
- private function progressHandle(event : ProgressEvent) : void {
- progressLabel.text = "complete " + event.bytesLoaded + " bytes";
- var fileUploadPercent : uint = event.bytesLoaded / event.bytesTotal * 100;
- uploadProgressBar.setProgress(fileUploadPercent, 100);
- uploadProgressBar.label = "Complete " + fileUploadPercent + "%";
- }
- private function completeHandle(event : Event) : void {
- infoText.htmlText = "Upload " + file.name + " Complete!";
- uploadBtn.enabled = false;
- }
- ]]
- </mx:Script>
- <mx:Button id="browserBtn" x="10" y="69" label="Browser"
- click="onClickBrowserBtn()"/>
- <mx:Button id="uploadBtn" x="236" y="69" label="Upload" enabled="false"
- click="onClickUploadBtn()"/>
- <mx:ProgressBar id="uploadProgressBar" x="10" y="33" width="291"
- themeColor="#009dff" maximum="100" direction="right" mode="manual"/>
- <mx:TextArea id="infoText" x="10" y="99" width="291" height="131"/>
- <mx:Label id="progressLabel" x="10" y="10" width="291"/>
- </mx:Application>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="init()">
<mx:Script>
[CDATA[
private const defaultRequestUrl : String = "http://localhost:8080/flexFileUploadServer/uploadServlet.do";
private var file : FileReference;
private function init():void {
Security.allowDomain("*");
file = new FileReference();
file.addEventListener(Event.SELECT, onFileSelect);
file.addEventListener(ProgressEvent.PROGRESS, progressHandle);
file.addEventListener(Event.COMPLETE, completeHandle);
//file.addEventListener(Event.OPEN, openHandle);
//file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
//file.addEventListener(Event.CANCEL, cancelHandler);
}
private function onClickBrowserBtn() : void {
file.browse(getTypeFilter());
}
private function getTypeFilter() : Array {
var imagesFilter:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png");
//var docFilter:FileFilter = new FileFilter("Documents", "*.pdf;*.doc;*.txt");
return [imagesFilter];
}
private function onFileSelect(event : Event) : void {
uploadBtn.enabled = true;
infoText.htmlText =
"Name: " + file.name + "<br/>" +
"Size: " + file.size + "<br/>" +
"Type: " + file.type + "<br/>" +
"Date: " + file.creationDate;
}
private function onClickUploadBtn() : void {
var request : URLRequest = new URLRequest(defaultRequestUrl);
request.data = "userId=123";
file.upload(request);
}
private function progressHandle(event : ProgressEvent) : void {
progressLabel.text = "complete " + event.bytesLoaded + " bytes";
var fileUploadPercent : uint = event.bytesLoaded / event.bytesTotal * 100;
uploadProgressBar.setProgress(fileUploadPercent, 100);
uploadProgressBar.label = "Complete " + fileUploadPercent + "%";
}
private function completeHandle(event : Event) : void {
infoText.htmlText = "Upload " + file.name + " Complete!";
uploadBtn.enabled = false;
}
]]
</mx:Script>
<mx:Button id="browserBtn" x="10" y="69" label="Browser"
click="onClickBrowserBtn()"/>
<mx:Button id="uploadBtn" x="236" y="69" label="Upload" enabled="false"
click="onClickUploadBtn()"/>
<mx:ProgressBar id="uploadProgressBar" x="10" y="33" width="291"
themeColor="#009dff" maximum="100" direction="right" mode="manual"/>
<mx:TextArea id="infoText" x="10" y="99" width="291" height="131"/>
<mx:Label id="progressLabel" x="10" y="10" width="291"/>
</mx:Application>
Java使用Spring的MultipartHttpServletRequest, 代码如下
- public void saveFile(HttpServletRequest request, HttpServletResponse response)
- throws IllegalStateException, IOException {
- CommonsMultipartResolver commonsMultipartResolver =
- new CommonsMultipartResolver(request.getSession().getServletContext());
- commonsMultipartResolver.setDefaultEncoding("utf-8");
- if (commonsMultipartResolver.isMultipart(request)) {
- MultipartHttpServletRequest multipartRequest =
- commonsMultipartResolver.resolveMultipart(request);
- Iterator iter = multipartRequest.getFileNames();
- for (;iter.hasNext();) {
- MultipartFile file = multipartRequest.getFile((String)iter.next());
- if (file != null) {
- File localFile = new File(file.getOriginalFilename());
- file.transferTo(localFile);
- }
- }
- System.out.println("userId: " + request.getParameter("userId"));
- }
- }
public void saveFile(HttpServletRequest request, HttpServletResponse response)
throws IllegalStateException, IOException {
CommonsMultipartResolver commonsMultipartResolver =
new CommonsMultipartResolver(request.getSession().getServletContext());
commonsMultipartResolver.setDefaultEncoding("utf-8");
if (commonsMultipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multipartRequest =
commonsMultipartResolver.resolveMultipart(request);
Iterator iter = multipartRequest.getFileNames();
for (;iter.hasNext();) {
MultipartFile file = multipartRequest.getFile((String)iter.next());
if (file != null) {
File localFile = new File(file.getOriginalFilename());
file.transferTo(localFile);
}
}
System.out.println("userId: " + request.getParameter("userId"));
}
}
当然也可以采用纯commons-fileupload-1.1.1.jar的实现代码,这个网上例子很多,这里就不写了。
参考
http://www.cnblogs.com/dannyr/archive/2006/11/13/559006.html

浙公网安备 33010602011771号