一、功能实现分析

1、soe中传入指定路径目录和文件名就能读取shp、cad并解析,然后返回JSON格式数据给flex端生成图形。(soe读取的是本地绝对路径)

2、所以首先要上传文件到soe发布所在的arcserver服务器。实现上传用java因此考虑用arcserver for java 自带的tomcat。

3、用arcserver自带tomcat上传要找到相应的tomcat路径并添加java包和jsp页面。

二、找到arcserver自带的tomcat并引入相应java包和jsp页面。

arcserver 9.3配置    路径:D:\Program Files\ArcGis\java\manager\service\tomcat\server\webapps\manager  最前面的目录可能不相同

在manager下的WIN-INF/lib下加入java包 ,并把你的jsp部署在manager目录下面(我的是放在mapPortal文件夹下),记得要在manager下面加入跨域文件crossdomain.xml。

flex中上传文件的URL:http://localhost:8399/manager/mapPortal/fileUp.jsp

arcserver 10.2配置  路径:C:\Program Files\ArcGIS\Server\framework\runtime\tomcat\webapps\arcgis#manager     最前面的目录可能不相同

在arcgis#manager下的WIN-INF/lib下加入java包 ,并把你的jsp部署在arcgis#manager目录下面(我的是放在mapPortal文件夹下)。跨域文件10.2已经配置好了不需要再添加。

flex中上传文件的URL:http://192.168.179.224:6080/arcgis/manager/mapPortal/fileUp.jsp

这样配置以后就可以将shp或cad文件传到发布soe的服务器上了,而且不需要额外部署一个应该服务。

jsp上传代码:

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<%@ page import="org.apache.commons.fileupload.FileItem" %>
<%@ page import="org.apache.commons.fileupload.FileUploadException" %>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<%
String realPath = application.getRealPath("/");
//文件的保存目录
String fileRootPath = realPath + "mapPortal\\upFiles\\";
int maxPostSize = 500 * 1024 * 1024;
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxPostSize);
try {
//检查上载文件的目录是否存在
File fileDir = new File(fileRootPath);
if(!fileDir.exists()){
fileDir.mkdirs();
}
//读入上传的数据
int zipDataLength = request.getContentLength();
//上载文件的最大字节
if(zipDataLength > maxPostSize){
System.out.println("上传的文件字节数不可以超过500M");
out.println("false@上传的文件字节数不可以超过500M");
return;
}
List fileItems = upload.parseRequest(request);
Iterator iter = fileItems.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
String name = item.getName();
//检查上载文件是否存在
File checkFile = new File(fileRootPath + name);
if(checkFile.exists()){
checkFile.delete();
System.out.println(fileRootPath + name + " 文件已经存在,被删除");
}
try {
int index = name.lastIndexOf(".");
String extName = name.substring(index,name.length());
String newName = String.valueOf(System.currentTimeMillis())+extName; //用时间重命名(当前的毫秒)
item.write(new File(fileRootPath + newName));
out.println("success@" + fileRootPath + newName);//成功后返回路径和新的文件名
System.out.println("true:" + fileRootPath + newName);
} catch (Exception e) {
e.printStackTrace();
out.println("false@"+e.getMessage());
return;
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
out.println("false@"+e.getMessage());
}
%>

flex端用FileReference指向jsp所在的服务器

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
xmlns:mytasks="pageaction.soe.*"
width="290" height="120" showCloseButton="true" fontSize="12"
borderColor="#6489C6" borderAlpha="0.9" borderThickness="2"
borderThicknessBottom="2" borderThicknessLeft="2" titleIcon="@Embed(source='../images/importFile.png')"
borderThicknessRight="2" headerHeight="22" title="导入ShapeFile或CAD文件"
close="this.visible=false" color="#FFFFFF" fontFamily="Microsoft YaHei UI"> <mx:Script>
<![CDATA[
import com.esri.ags.Graphic;
import com.esri.ags.geometry.Geometry;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.geometry.Polygon;
import com.esri.ags.layers.GraphicsLayer; import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.CloseEvent;
import mx.managers.PopUpManager;
import mx.rpc.AsyncResponder;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.http.HTTPService;
import mx.rpc.remoting.mxml.RemoteObject; import pageaction.soe.soeEvent;
import pageaction.soe.soeParameters;
import pageaction.soe.soeResult; private var myFileReference:FileReference = new FileReference(); private var filter_shp:FileFilter = new FileFilter("shapefile文件 (*.shp)", "*.shp");
private var filter_dwg:FileFilter = new FileFilter("CAD文件 (*.dwg)", "*.dwg");
private var filter_DWG:FileFilter = new FileFilter("CAD文件 (*.DWG)", "*.DWG");
private var _soeUrl:String = ""; public function get soeUrl():String{
return _soeUrl;
} public function set soeUrl(value:String):void{
_soeUrl = value;
} private function soeExecute(filePath:String):void{
var soeparameter:soeParameters = new soeParameters();
//soeparameter.url = "http://localhost:8399/arcgis/rest/services/xz/MapServer/2/query";
soeparameter.url = "http://192.168.179.169:6080/arcgis/rest/services/SampleWorldCities/MapServer/exts/ConvertShapeToJson/ConvertShapeToJsonOperation";
/*soeparameter.outFields = "*";
soeparameter.returnGeometry = true;
var whereStr:String;
if(this.txtWhere.text != ""){
whereStr = this.txtWhere.text;
}else{
whereStr = "objectid = 780";
}
soeparameter.where = whereStr;*/
//soeparameter.shapePath = "E:\\ShapeTest\\zz_test.shp";
soeparameter.shapePath = filePath;
soetask.showBusyCursor = true;
soetask.execute(soeparameter);
} private function compleShowSoeResult(event:soeEvent):void{
var soeRe:soeResult = event.soeresult;
var obj:Object = soeRe.obj;
var arrGraphics:Array = new Array();
for(var i:int = 0;i<obj.geometries.length;i++){
var parentRing:Array = new Array();
var rings:Array = Array(obj.geometries[i].geometry.rings);//获取每个geometry的ring对象
for(var j:int=0;j<rings[0].length;j++){//每个geometry的ring组成部分
var partRing:Array = new Array();
var childRing:Array = rings[0][j];
for(var k:int=0;k<childRing.length;k++){//每个ring的点个数
var mapPoint:MapPoint = new MapPoint(childRing[k][0],childRing[k][1]);
partRing.push(mapPoint);
}
parentRing.push(partRing);
}
var ply:Polygon = new Polygon(parentRing);
var graphic:Graphic = new Graphic(ply);
arrGraphics.push(graphic);
}
this.parentApplication.spatialAnalyByImportFileGraphic(arrGraphics);
/*if(obj.features.length != 0){
var temp:String = obj.features[0].attributes.KSMC;
Alert.show(temp);
}else{
Alert.show("结果为空!");
}*/
} private function btnSelectFileOnClick(event:Event):void{
myFileReference.browse([filter_shp,filter_dwg,filter_DWG]);
myFileReference.addEventListener(Event.SELECT, onFileSelect);
myFileReference.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, completeHandler);
myFileReference.addEventListener(IOErrorEvent.IO_ERROR,ioerror);
myFileReference.addEventListener(ProgressEvent.PROGRESS, progressHandler);
} private function onFileSelect(event:Event):void{
var fileName:String = myFileReference.name;
this.txtFileName.text = fileName;
} private function completeHandler(evt:DataEvent):void{
var strResult:String = String(evt.data);
//截掉左右空格
strResult = strResult.replace(/^\s*|\s*$/g,"").split(" ").join("");
var returnArr:Array = strResult.split("@");
var flag:String = returnArr[0];
if(flag == "success"){
//promptMessage("上传成功!",this);
var filePath:String = returnArr[1];
if(filePath != "" || filePath != null){
soeExecute(filePath);
}
}else{
promptMessage("上传失败!",this);
}
this.bar.visible = false;
} private function ioerror(event:Event):void{
this.bar.visible = false;
promptMessage("IO错误!\r 上传失败!",this); } private function progressHandler(event:ProgressEvent):void {
var file:FileReference = FileReference(event.target);
var baifenbi:Number=(event.bytesLoaded /event.bytesTotal)*100;
bar.label=baifenbi.toString().substring(0,3)+"%";
bar.setProgress(baifenbi,100); } private function importFile(event:Event):void{
if (this.txtFileName.text == ""){
promptMessage("请选择要上传文件!",this);
return;
}
this.bar.visible = true;
var requestUrl:String = "";
var fileName:String = this.txtFileName.text;
var fileType:String = fileName.substr(fileName.indexOf(".")+1,fileName.length);
if(fileType == "shp"){
//requestUrl = "http://192.168.179.156:8080/mapPortal/fileUp.jsp";
requestUrl = "http://192.168.179.224:6080/arcgis/manager/mapPortal/fileUp.jsp";//arcserver 10.2
//requestUrl = "http://localhost:8399/manager/mapPortal/fileUp.jsp";////arcserver 9.3
}else{//dwg
requestUrl = "http://192.168.179.156:8080/mapPortal/fileUp.jsp";
} var request:URLRequest = new URLRequest(requestUrl);
try{
this.bar.visible = true;
myFileReference.upload(request);
}catch (error:Error){
promptMessage("上传文件失败!",this);
}
} private function promptMessage(msg:String, parent:DisplayObject):void{
Alert.okLabel = "确定";
var alert:Alert = new Alert();
alert.setStyle("messageStyleName","AlertMessage");
alert.setStyle("titleStyleName","AlertTitle");
alert.title = "提示信息";
alert.text = msg;
PopUpManager.addPopUp(alert,parent,true);
PopUpManager.centerPopUp(alert);
}
]]>
</mx:Script>
<mytasks:soeTask id="soetask" executeComplete="compleShowSoeResult(event)"/>
<mx:Canvas width="100%" height="100%" verticalScrollPolicy="off" horizontalScrollPolicy="off" color="#0B333C">
<mx:Label x="3.5" y="15" text="选择导入文件:" fontWeight="bold"/>
<mx:TextInput id="txtFileName" y="13" width="150" height="25" borderStyle="solid" right="50" editable="false" backgroundColor="#F9F9F9"/>
<mx:Button id="btnSelectFile" y="13" label="……" width="35" click="btnSelectFileOnClick(event)" right="7" height="25"/>
<mx:ProgressBar id="bar" labelPlacement="bottom"
minimum="0" visible="false" maximum="100" label="" trackHeight="15"
direction="right" mode="manual" width="100%" x="0" height="15" bottom="1" borderColor="#F6F7F7" themeColor="#FD250F"/>
<mx:Button id="btnOk" x="87" y="50" label="确 定" click="importFile(event)" height="22"/>
<mx:Button id="btnCancel" y="50" label="取 消" click="this.visible = false" height="22" right="50"/>
</mx:Canvas>
</mx:TitleWindow>

利用arcserver 自带tomcat实现上传shapefile、cad等文件,然后用soe解析。的更多相关文章

  1. 利用WCF与Android实现图片上传并传参

    利用WCF与Android实现图片上传并传参 最近做一个项目后端使用WCF接收Android手机拍照并带其它参数保存到服务器里:刚好把最近学习的WCF利用上,本以为是个比较简单的功能应该很好实现,没想 ...

  2. win7下利用ftp实现华为路由器的上传和下载

    win7下利用ftp实现华为路由器的上传和下载 1.  Win7下ftp的安装和配置 (1)开始->控制面板->程序->程序和功能->打开或关闭Windows功能 (2)在Wi ...

  3. 利用jquery+iframe做一个ajax上传效果

    以下是自学it网--中级班上课笔记 网址:www.zixue.it html页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict ...

  4. PHP+ajaxForm异步带进度条上传文件实例

    在使用ajaxForm方法之前,首先需要安装form.js的插件,网上有: 一.首先说用法,ajaxForm可以接收0或1个参数,该参数可以是一个变量.一个对象或回调函数,这个对象主要有以下参数: v ...

  5. maven tomcat插件上传项目到tomcat服务器报错SEVERE: One or more listeners failed to start.

    以前觉了maven依赖设置很简单,就是将手动导入jar包转化为自动下载导入 但发现的一个问题, 在使用maven插件tomcat打包上传工具时 tomcat-maven-plugin <buil ...

  6. iOS利用AFNetworking(AFN) 实现图片上传

    1.上传图片以二进制流的形式上传 1 #pragma mark - 文件上传  2 - (IBAction)uploadImage  3 {  4     /*  5      此段代码如果需要修改, ...

  7. Ajax实现文件上传的临时垃圾文件回收策略

    转载请注明原文出处:http://www.cnblogs.com/ygj0930/p/6126240.html 在我们web开发过程中,一个很重要的技术就是Ajax(异步传输).Ajax通过把数据从网 ...

  8. 如何上传网站程序(文件浏览器上传网页、FileZilla上传网站程序)

    问题场景: 网页制作完成后,程序需上传至虚拟主机. 注意事项: Windows系统的主机请将全部网页文件直接上传到FTP根目录,即 / . Linux系统的主机请将全部网页文件直接上传到 /htdoc ...

  9. 上传漏洞科普[1]-文件上传表单是Web安全主要威胁

    为了让最终用户将文件上传到您的网站,就像是给危及您的服务器的恶意用户打开了另一扇门.即便如此,在今天的现代互联网的Web应用程序,它是一种 常见的要求,因为它有助于提高您的业务效率.在Facebook ...

随机推荐

  1. 【leetcode80】Reverse Vowels of a String(元音字母倒叙)

    题目描述: 写一个函数,实现输入一个字符串,然后把其中的元音字母倒叙 注意 元音字母包含大小写,元音字母有五个a,e,i,o,u 原文描述: Write a function that takes a ...

  2. 面向对象编程(OOP)的五大特征-java学习之旅(1)

    这是Alan Kay关于第一个成功的面向对象语言SmallTalk的总结: 1.所有的东西都是对象.可将对象想象成一种新型的变量:它保存着数据,但是可要求它对自身进行操作,理论上讲,可从要解决的问题身 ...

  3. 【面试必备】Swift&nbsp;面试题及其答案

    原文:Swift Interview Questions and Answers 原作者:Antonio Bello 原作者介绍: Antonio 拥有丰富的编程经验.他开始编程的时候,内存单位还是 ...

  4. 《java入门第一季》之正则表达式常见规则

    正则表达式规则不用记住,只是知道是做什么用的即可.常见规则如下: A:字符 x 字符 x.举例:'a'表示字符a \\ 反斜线字符. \n 新行(换行)符 ('\u000A') (\\n来表示换行) ...

  5. 【一天一道LeetCode】#20. Valid Parentheses

    一天一道LeetCode系列 (一)题目 Given a string containing just the characters '(', ')', '{', '}', '[' and ']', ...

  6. SpriteBuilder中使用TrueType字体的一些障碍

    在实践中,有一些小的陷阱和障碍可能阻止你使用一般的TrueType字体. 第一个,必须要有一个有效的字体文件.在Finder中双击该.ttf文件,应该会打开Font Book app,显示一个象形符号 ...

  7. Tomcat configuration DataSource

    1. configuration MySql Connection DataSource 原理介绍 java 调用 Tomcat 中的 ConnectionPool 通过Context 中去查找  j ...

  8. 避免"Physics Space Locked"错误

    在一些cocos2d中使用物理引擎的代码中,往往会出现如下错误: Aborting due to Chipmunk error: You cannot manually reindex objects ...

  9. LeetCode之“动态规划”:Maximum Product Subarray

    题目链接 题目要求: Find the contiguous subarray within an array (containing at least one number) which has t ...

  10. 详解Linux2.6内核中基于platform机制的驱动模型 (经典)

    [摘要]本文以Linux 2.6.25 内核为例,分析了基于platform总线的驱动模型.首先介绍了Platform总线的基本概念,接着介绍了platform device和platform dri ...