利用arcserver 自带tomcat实现上传shapefile、cad等文件,然后用soe解析。
一、功能实现分析
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解析。的更多相关文章
- 利用WCF与Android实现图片上传并传参
利用WCF与Android实现图片上传并传参 最近做一个项目后端使用WCF接收Android手机拍照并带其它参数保存到服务器里:刚好把最近学习的WCF利用上,本以为是个比较简单的功能应该很好实现,没想 ...
- win7下利用ftp实现华为路由器的上传和下载
win7下利用ftp实现华为路由器的上传和下载 1. Win7下ftp的安装和配置 (1)开始->控制面板->程序->程序和功能->打开或关闭Windows功能 (2)在Wi ...
- 利用jquery+iframe做一个ajax上传效果
以下是自学it网--中级班上课笔记 网址:www.zixue.it html页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict ...
- PHP+ajaxForm异步带进度条上传文件实例
在使用ajaxForm方法之前,首先需要安装form.js的插件,网上有: 一.首先说用法,ajaxForm可以接收0或1个参数,该参数可以是一个变量.一个对象或回调函数,这个对象主要有以下参数: v ...
- maven tomcat插件上传项目到tomcat服务器报错SEVERE: One or more listeners failed to start.
以前觉了maven依赖设置很简单,就是将手动导入jar包转化为自动下载导入 但发现的一个问题, 在使用maven插件tomcat打包上传工具时 tomcat-maven-plugin <buil ...
- iOS利用AFNetworking(AFN) 实现图片上传
1.上传图片以二进制流的形式上传 1 #pragma mark - 文件上传 2 - (IBAction)uploadImage 3 { 4 /* 5 此段代码如果需要修改, ...
- Ajax实现文件上传的临时垃圾文件回收策略
转载请注明原文出处:http://www.cnblogs.com/ygj0930/p/6126240.html 在我们web开发过程中,一个很重要的技术就是Ajax(异步传输).Ajax通过把数据从网 ...
- 如何上传网站程序(文件浏览器上传网页、FileZilla上传网站程序)
问题场景: 网页制作完成后,程序需上传至虚拟主机. 注意事项: Windows系统的主机请将全部网页文件直接上传到FTP根目录,即 / . Linux系统的主机请将全部网页文件直接上传到 /htdoc ...
- 上传漏洞科普[1]-文件上传表单是Web安全主要威胁
为了让最终用户将文件上传到您的网站,就像是给危及您的服务器的恶意用户打开了另一扇门.即便如此,在今天的现代互联网的Web应用程序,它是一种 常见的要求,因为它有助于提高您的业务效率.在Facebook ...
随机推荐
- Ionic APP-Web SPA开发进阶(一)AngularJS全栈工程狮进阶
AngularJS全栈工程狮进阶 前言 学习了一段时间AngularJS,开始接触移动端APP开发.为了响应公司开发需求,采用"Hybrid"混血开发方法.采用Ionic前端框架, ...
- 【算法导论】图的广度优先搜索遍历(BFS)
图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...
- 【Qt编程】基于Qt的词典开发系列<三>--开始菜单的设计
这篇文章讲讲如何实现开始菜单(或者称为主菜单)的设计.什么是开始菜单呢?我们拿常用的软件来用图例说明,大多数软件的开始菜单在左下角,如下图: 1.window 7的开始菜单 2.有道词典的主菜单 3. ...
- OpenCV特征点提取----Fast特征
1.FAST(featuresfrom accelerated segment test)算法 http://blog.csdn.net/yang_xian521/article/details/74 ...
- Struts2(XWork)中的Container 一
本文是<<struts2 技术内幕>>的学习笔记 在进行面向对象编程的时候,我们不可避免地要使用继承实现等等java提供的语法支持.但是复杂的对象关系也为对象生命周期的管理带来 ...
- Factor Pattern----工厂模式
一. 概念 工厂模式就是负责生成其他对象的类或方法,就是把创建对象的过程封装起来,这样随时可以产生一个新的对象,减少代码之间耦合. 二. 使用场景(原因) 工厂模式可以将对象的生产从直接new 一个对 ...
- 关于MySQL 5.6.24 解压缩版重启电脑后,无法启动的问题
最近的项目需要用到mysql,想起以前安装过,就得应该没啥问题.也不知道是软件更新换代的问题,还是版权问题,网上找的msi版本的mysql都很难安装,一开始要安装.NET,我忍了,然后又要安装Visu ...
- jQuery之select的option怎样绑定事件
HTML: <select id='select'> <option value='0'>上海</option> <option value='1'>北 ...
- 【基础】CSS实现多重边框的5种方式
简言 目前最优雅地实现多重边框的方案是利用CSS3 的 box-shadow属性,但如果要兼容老的浏览器,则需要选择其它的方案.本文简要地列举了几种多重边框的实现方案,大家可以根据项目实际及兼容性要求 ...
- minimun path sum(最小路径和)
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...