利用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 ...
 
随机推荐
- 分布式进阶(十一) Docker 常见错误汇总
			
NO.1 以上添加网桥的命令在Ubuntu14.04中是不可行的.正确的命令如下: brctl addbr br0 ifconfig br0 192.168.1.188 netmask 255.255 ...
 - 使用LogKit进行日志操作
			
1. 概述 任何一个系统中,日志都是不可缺少的,现在Apache提供了两套日志工具,一个就是Log4j,另一个是本文要给出例子的LogKit. Log4j和LogKit有很多相似的地方.比如 ...
 - MiseringThread.java 解析页面线程
			
MiseringThread.java 解析页面线程 http://injavawetrust.iteye.com package com.iteye.injavawetrust.miner; imp ...
 - Linux System Programming -- Appendix
			
这本书附录的名字是 "GCC对C语言的扩展" ,一下的内容是对扩展的总结 类型发现 GCC 允许通过变量的引用识别类型.这种操作支持泛型编程.在 C++.Ada 和 Java™ 语 ...
 - Mysql数据库安装和配置
			
http://blog.csdn.net/pipisorry/article/details/46773507 Mysql数据库安装和配置.mysql语法.特殊符号及正则表达式的使用.MySQL备份与 ...
 - kettle文件自动化部署(shell脚本执行):命令行参数传入
			
shell脚本中调用kitchen 和 pan去执行,job和transformation文件.分 windows和 dos系统两种. 举个简单的小例子 shell脚本: export JAVA_HO ...
 - Linux内核通用队列的使用笔记(读linux内核设计与实现)
			
Linux内核通用队列实现 Kfifo位置:kernel/kififo.c 使用需要包含头文件#include <kernel/kififo> 1.创建队列(动态创建)int kfifo_ ...
 - mysql清空表
			
清空某个mysql表中所有内容 delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate tabl ...
 - Shell Script - 追踪与debug
			
[root@www ~]# sh [-nvx] scripts.sh 选项与参数: -n :不要运行 script,仅查询语法的问题: -v :再运行 sccript 前,先将 scripts 的内容 ...
 - Redis配置信息
			
# Redis configuration file example # Note on units: when memory size is needed, it is possible to sp ...