Flex和Servlet结合上传文件
Flex和Servlet结合上传文件
1、准备工作
(1)下载文件上传的组件,commons-fileupload-1.3.1.jar
(2)下载文件输入输出jar,commons-io-2.4.jar
(3)有关servlet的jar包,servlet-api.jar
2、正式开发
(1)新建一个web项目工程,FlexFileUpload
(2)在src新建一个上传文件的servlet
FlexFileUploadServlet.java:
package com.you.upload.servlet;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FlexFileUploadServlet extends HttpServlet
{
/**
* @Fields serialVersionUID:序列化
*/
private static final long serialVersionUID = -6839362803884547766L;
/**
* Constructor of the object.
*/
public FlexFileUploadServlet()
{
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy()
{
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
super.doGet(request, response);
doPost(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to
* post.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
@SuppressWarnings("rawtypes")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
/**
* 防止中文乱码
*/
response.setContentType("text/html;charset=gb2312");
/**
* 设置编码格式
*/
response.setCharacterEncoding("utf-8");
/**
* 创建一个工厂类
*/
FileItemFactory factory = new DiskFileItemFactory();
/**
* 上传对象
*/
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator it = items.iterator();
while (it.hasNext())
{
FileItem item = (FileItem) it.next();
/**
* 判断是表单域
*/
if (item.isFormField())
{
System.out.println("一个表单域");
}
else
{
/**
* 处理文件上传
*/
System.out.println("不是一个表单域");
String fileName = item.getName();
byte[] data = item.get();
/**
* 获取文件上传路径
*/
String file = getServletConfig().getInitParameter("file");
String fileFolderName = getServletContext().getRealPath(file + "\\" + fileName);
try {
FileOutputStream fileOutSt = new FileOutputStream(fileFolderName);
try
{
fileOutSt.write(data);
fileOutSt.close();
}
catch (IOException exception)
{
exception.printStackTrace();
}
}
catch (FileNotFoundException exception)
{
exception.printStackTrace();
}
}
}
}
catch (FileUploadException exception)
{
exception.printStackTrace();
}
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException
* if an error occurs
*/
public void init() throws ServletException
{
// Put your code here
}
}
(3)配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>FlexFileUploadServlet</servlet-name>
<servlet-class>com.you.upload.servlet.FlexFileUploadServlet</servlet-class>
<init-param>
<description>上传文件临时路径</description>
<param-name>file</param-name>
<param-value>file</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>FlexFileUploadServlet</servlet-name>
<url-pattern>/FlexFileUploadServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
(4)打开Flash Builder,新建Flex项目
FileUpload.mxml:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
width="100%" height="100%" creationComplete="initHandler()"
fontSize="12" fontWeight="bold" accentColor="#94E1ED">
<fx:Style>
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";
Panel {
borderStyle: solid;
borderColor: #ff0000;
borderAlpha: 0.5;
borderThickness: 2;
roundedBottomCorners: true;
cornerRadius: 10;
headerHeight: 50;
backgroundAlpha: 0.5;
highlightAlphas: 0.4, 0.24;
headerColors: #cccc00, #cccc00;
footerColors: #660033, #4217c2;
backgroundColor: #00ffff;
dropShadowEnabled: true;
shadowDistance: 1;
titleStyleName: "mypanelTitle";
}
.mypanelTitle {
letterSpacing: 1;
color: #6600cc;
textAlign: left;
fontFamily: Trebuchet MS;
fontSize: 16;
fontWeight: bold;
fontStyle: italic;
textDecoration: underline;
}
</fx:Style>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.FlexEvent;
[Bindable]
//提示用户选择要上载的文件或用于下载的位置
private var fileRefer:FileReference;
[Bindable]
//判断文件是否选中
private var fileSelected:Boolean;
[Bindable]
//上传文件临时路径
private var serverURL:String = "http://localhost:8686/FlexFileUpload/FlexFileUploadServlet";
private var stat:Array = new Array();
[Bindable]
private var statusArray:ArrayCollection = new ArrayCollection();
/**
* 初始化函数
*/
protected function initHandler():void
{
fileRefer = new FileReference();
fileRefer.addEventListener(Event.SELECT, onFileSelect);
fileRefer.addEventListener(ProgressEvent.PROGRESS,onUploadProgress);
fileRefer.addEventListener(Event.COMPLETE, onUploadComplete);
fileRefer.addEventListener(IOErrorEvent.IO_ERROR, onUploadError);
fileRefer.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onUploadError);
}
/**
* 选择文件事件函数
*/
private function onFileSelect(event:Event):void
{
fileSelected = true;
fileTxt.text = fileRefer.name;
stat.push({status:"准备上传 "+fileTxt.text});
statusArray = new ArrayCollection(stat);
}
/**
* 正在上传事件函数
*/
private function onUploadProgress(event:ProgressEvent):void
{
stat.push({status:"进度.."+((event.bytesLoaded * 100) / event.bytesTotal).toString()+"%"});
statusArray = new ArrayCollection(stat);
}
/**
* 上传完全事件函数
*/
private function onUploadComplete(event:Event):void
{
stat.push({status:"上传成功!"});
statusArray = new ArrayCollection(stat);
}
/**
* 上传出现错误事件函数
*/
private function onUploadError(event:Event):void
{
if (event is IOErrorEvent)
{
stat.push({status:"输入输出错误: "+(event as IOErrorEvent).text.toString()});
statusArray = new ArrayCollection(stat);
}
else if (event is SecurityErrorEvent)
{
stat.push({status:"安全错误: "+(event as IOErrorEvent).text.toString()});
statusArray = new ArrayCollection(stat);
}
}
/**
* 浏览按钮事件函数
*/
protected function uploadBtn_clickHandler(event:MouseEvent):void
{
fileRefer.browse();
}
/**
* 上传文件事件函数
*/
protected function uploadClickHandler(event:MouseEvent):void
{
if (!fileSelected || (urlTxt.text.length == 0))
{
Alert.show("请选择一个文件并选择路径");
return;
}
var urlRequest:URLRequest = new URLRequest(urlTxt.text);
fileRefer.upload(urlRequest);
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:Panel title="上传文件" horizontalCenter="0" verticalCenter="0" width="400" height="400" borderColor="#FFFFFF" backgroundColor="#D1EEEE">
<mx:VBox width="30%" height="40%" horizontalAlign="left" horizontalGap="0" paddingTop="5" paddingLeft="12">
<mx:HBox width="100%" height="10%" horizontalAlign="left">
<mx:VBox width="30%" height="100%" horizontalAlign="right" verticalAlign="middle">
<s:Label text="文件名:" width="80" fontWeight="bold"></s:Label>
</mx:VBox>
<mx:VBox width="40%" height="100%" horizontalAlign="left">
<s:TextInput id="fileTxt" width="200" editable="false" toolTip="选择上传文件"/>
</mx:VBox>
<mx:VBox width="30%" height="100%" horizontalAlign="left" verticalAlign="middle">
<s:Button id="uploadBtn" label="浏览..." click="uploadBtn_clickHandler(event)" width="80"/>
</mx:VBox>
</mx:HBox>
<mx:HBox width="100%" height="10%" horizontalAlign="left">
<mx:VBox height="100%" width="30%" horizontalAlign="left" verticalAlign="middle">
<s:Label text="服务器路径:" width="80" fontWeight="bold"></s:Label>
</mx:VBox>
<mx:VBox height="100%" width="70%" horizontalAlign="left">
<s:TextInput id="urlTxt" width="290" text="{serverURL}"/>
</mx:VBox>
</mx:HBox>
<mx:HBox height="10%" width="100%" horizontalAlign="center">
<s:Button id="uploadBut" label="上传文件" click="uploadClickHandler(event)" enabled="{fileSelected}" />
</mx:HBox>
<mx:HBox height="70%" width="100%" horizontalAlign="center">
<mx:DataGrid id="statusDG" width="100%" height="250" dataProvider="{statusArray}" variableRowHeight="true" wordWrap="true">
<mx:columns>
<mx:DataGridColumn dataField="status" headerText="上传文件状态" paddingLeft="0" paddingRight="0">
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
</mx:HBox>
</mx:VBox>
</s:Panel>
</s:Application>
3、运行结果
(1)初始化时
(2)上传文件
(3)上传文件之前服务器file文件夹
(4)上传文件之后服务器file文件夹
Flex和Servlet结合上传文件的更多相关文章
- Flex和Servlet结合上传文件报错(二)
1.详细报错例如以下 一个表单域 不是一个表单域 java.io.FileNotFoundException: D:\MyEclipse\workspace\FlexFileUpload\Web\up ...
- Flex和Servlet结合上传文件报错(一)
1.具体错误如下 一个表单域 不是一个表单域 java.io.FileNotFoundException: D:\MyEclipse\workspace\FlexFileUpload\Web\null ...
- Servlet异步上传文件
这里需要用到插件ajaxfileupload.js,jar包:commons-fileupload-1.3.2.jar,commons-io-2.5.jar 注意红色部分的字!!!! 1.创建一个we ...
- Servlet 实现上传文件以及同时,写入xml格式文件和上传
package com.isoftstone.eply.servlet; import java.io.BufferedReader; import java.io.BufferedWriter; i ...
- Java Servlet 接收上传文件
在Java中使用 Servlet 来接收用户上传的文件,需要用到两个apache包,分别是 commons-fileupload 和 commons-io 包: 如果直接在doPost中,使用requ ...
- Android、iOS与Servlet接口上传文件和JSON串的交互
package etcom.servlet; import java.io.File; import java.io.IOException; import java.sql.Connection; ...
- 使用Servlet实现上传文件功能
1.servlet只需加上一个注释和用request.getPart来获取文件的值,这是servlet3.0的API 2.表单需要加上一个属性enctype="multipart/form- ...
- 上传文件,经过Zuul,中文文件名乱码解决办法
转载请标明出处: http://blog.csdn.net/forezp/article/details/77170470 本文出自方志朋的博客 问题描述 在项目中又一个上传文件的oss服务,直接调用 ...
- java 网页 保存上传文件
网页请求提交到另外一个jsp 进行处理 index.jsp <%@ page language="java" import="java.util.*" p ...
随机推荐
- left join on/right join on/inner join on/full join on连接
现在有两张表,第一张表是用户表,第二张表是订单表.情况是这样的,在我这张用户表里用户很多,但是真正下单的人却不多,而且,每一个用户可以有多个订单.然后领导喊话了,小王,你给我查下,现在咱们的订单有多少 ...
- WebService 的工作原理
Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的 ...
- BZOJ 4538: [Hnoi2016]网络 [整体二分]
4538: [Hnoi2016]网络 题意:一棵树,支持添加一条u到v权值为k的路径,删除之前的一条路径,询问不经过点x的路径的最大权值 考虑二分 整体二分最大权值,如果\(k \in [mid+1, ...
- JavaScript语言学习中的注意事项
javascript: 基于浏览器 基于对象 事件驱动 脚本语言 由: javascript: ECMAscript(ES) DOM文档对象模型 BOM浏览器对象模型,三部分组成 使用js的三种方式 ...
- 读书共享 Primer Plus C-part 4
第四章 字符串和格式化输入输出 关于printf - 左对齐 #include<stdio.h> void main() { char str [100] = "liuchua ...
- memcached 与 redis 的区别和具体应用场景
1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器.其本质上就是一个 ...
- selenium2 python自动化测试实战(回归测试)
selenium2 python自动化测试实战 最近接手商城的项目,针对后台测试,功能比较简单,但是流程比较繁多,涉及到前后台的交叉测试.在对整个项目进行第一轮测试完成之后,考虑以后回归测试任务比较重 ...
- Go语言极速入门手册
Github: https://github.com/coderzh/CodeTips /* gotips_test.go: Golang速学速查速用代码手册 Source: github.com/c ...
- css3渐变 transition使用方法
<style> div{ width:300px; height:300px; background:#89F; margin:100px auto; transition:width 1 ...
- 【JavaWeb】权限管理系统
前言 前面我们做的小项目都是一个表的,业务代码也相对简单.现在我们来做一个权限管理系统,体验一下多表的业务逻辑,顺便巩固一下过滤器的知识.! 目的 现在我有一个管理商品.订单的页面.当用户点击某个超链 ...