using System;
|
using System.Collections.Generic;
|
using System.IO;
|
using System.Linq;
|
using System.Net;
|
using System.Net.Http;
|
using System.Net.Http.Headers;
|
using System.Text;
|
using System.Web;
|
using System.Web.Http;
|
|
namespace ExportMap.cs
|
{
|
public class WebUtils
|
{
|
#region LFData
|
private static readonly object _obj = new object();
|
|
private static string _lfData;
|
|
public static string LFData
|
{
|
get
|
{
|
if (string.IsNullOrEmpty(_lfData))
|
{
|
_lfData = Tools.GetSetting("lfData");
|
}
|
|
return _lfData;
|
}
|
}
|
|
// http://localhost/ExportMap/tile0/12/3338/1671.png?path=2d\tiles\0102
|
private static byte[] _emptyPng;
|
|
public static byte[] EmptyPng
|
{
|
get
|
{
|
if (null == _emptyPng)
|
{
|
lock (_obj)
|
{
|
if (null == _emptyPng)
|
{
|
string file = Tools.BaseDir + "Sources\\empty.png";
|
_emptyPng = ReadFileToBytes(file);
|
}
|
}
|
}
|
|
return _emptyPng;
|
}
|
}
|
|
// http://127.0.0.1/ExportMap/terra0/12/6822/2744.terrain?v=1.1.0&path=3d\terrain\dem\t
|
private static byte[] _emptyTerrain;
|
|
public static byte[] EmptyTerrain
|
{
|
get
|
{
|
if (null == _emptyTerrain)
|
{
|
lock (_obj)
|
{
|
if (null == _emptyTerrain)
|
{
|
string file = Tools.BaseDir + "Sources\\empty.terrain";
|
_emptyTerrain = ReadFileToBytes(file);
|
}
|
}
|
}
|
|
return _emptyTerrain;
|
}
|
}
|
#endregion
|
|
/// <summary>
|
/// 获取地形图层文件
|
/// </summary>
|
public static HttpResponseMessage GetLayerJson(HttpRequestMessage Request, string path)
|
{
|
string basePath = Path.Combine(LFData, path);
|
if (!Directory.Exists(basePath))
|
{
|
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest, "路径不存在!"));
|
}
|
|
string file = basePath + "\\layer.json";
|
if (!File.Exists(file))
|
{
|
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound, "文件不存在!"));
|
}
|
|
return DownloadFile(file, "layer.json", "application/json");
|
}
|
|
/// <summary>
|
/// 获取地形文件
|
/// </summary>
|
public static HttpResponseMessage GetTerrain(HttpRequestMessage Request, string path, int z, int x, int y)
|
{
|
string basePath = Path.Combine(LFData, path);
|
if (!Directory.Exists(basePath))
|
{
|
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest, "路径不存在!"));
|
}
|
|
string file = basePath + "\\" + z + "\\" + x + "\\" + y + ".terrain";
|
if (!File.Exists(file))
|
{
|
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound, "文件不存在!"));
|
}
|
|
return DownloadFile(file, y + ".terrain");
|
}
|
|
/// <summary>
|
/// 获取地形文件,不存在返回空文件
|
/// </summary>
|
public static HttpResponseMessage GetTerrain0(HttpRequestMessage Request, string path, int z, int x, int y)
|
{
|
string basePath = Path.Combine(LFData, path);
|
if (!Directory.Exists(basePath))
|
{
|
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest, "路径不存在!"));
|
}
|
|
string file = basePath + "\\" + z + "\\" + x + "\\" + y + ".terrain";
|
if (!File.Exists(file))
|
{
|
return DownloadFile(EmptyTerrain, y + ".terrain");
|
}
|
|
return DownloadFile(file, y + ".terrain");
|
}
|
|
/// <summary>
|
/// 获取影像文件
|
/// </summary>
|
public static HttpResponseMessage GetTile(HttpRequestMessage Request, string path, int z, int x, int y)
|
{
|
string basePath = Path.Combine(LFData, path, z.ToString());
|
if (!Directory.Exists(basePath))
|
{
|
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound, "路径不存在!"));
|
}
|
|
string file = basePath + "\\" + x + "\\" + y + ".png";
|
if (!File.Exists(file))
|
{
|
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound, "文件不存在!"));
|
}
|
|
return DownloadFile(file, y + ".png", "image/png");
|
}
|
|
/// <summary>
|
/// 获取影像文件,不存在返回空文件
|
/// </summary>
|
public static HttpResponseMessage GetTile0(HttpRequestMessage Request, string path, int z, int x, int y)
|
{
|
string basePath = Path.Combine(LFData, path, z.ToString());
|
if (!Directory.Exists(basePath))
|
{
|
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound, "路径不存在!"));
|
}
|
|
string file = basePath + "\\" + x + "\\" + y + ".png";
|
if (!File.Exists(file))
|
{
|
return DownloadFile(EmptyPng, y + ".png", "image/png");
|
}
|
|
return DownloadFile(file, y + ".png", "image/png");
|
}
|
|
/// <summary>
|
/// 下载文件
|
/// </summary>
|
public static HttpResponseMessage DownloadFile(string file, string fileName, string mediaType = "application/octet-stream")
|
{
|
//string fileName = Path.GetFileName(file);
|
//FileStream stream = new FileStream(file, FileMode.Open);
|
FileStream stream = File.OpenRead(file);
|
|
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
|
response.Content = new StreamContent(stream);
|
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
|
response.Content.Headers.ContentDisposition.FileName = HttpUtility.UrlEncode(fileName);
|
response.Content.Headers.ContentType = new MediaTypeHeaderValue(mediaType);
|
|
//response.Content.Headers.Add("Cache-Control", "max-age=2592000"); // 缓存1个月
|
response.Content.Headers.Expires = DateTimeOffset.Now.AddMonths(1); // new DateTimeOffset(DateTime.Now.AddMonths(1));
|
|
return response;
|
}
|
|
/// <summary>
|
/// 下载文件
|
/// </summary>
|
public static HttpResponseMessage DownloadFile(byte[] bytes, string fileName, string mediaType = "application/octet-stream")
|
{
|
MemoryStream ms = new MemoryStream(bytes);
|
|
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
|
response.Content = new StreamContent(ms);
|
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
|
response.Content.Headers.ContentDisposition.FileName = HttpUtility.UrlEncode(fileName);
|
response.Content.Headers.ContentType = new MediaTypeHeaderValue(mediaType);
|
|
//response.Content.Headers.Add("Cache-Control", "max-age=2592000"); // 缓存1个月
|
response.Content.Headers.Expires = DateTimeOffset.Now.AddMonths(1); // new DateTimeOffset(DateTime.Now.AddMonths(1));
|
|
return response;
|
}
|
|
#region 工具类
|
/// <summary>
|
/// 读取文件至byte[]
|
/// </summary>
|
public static byte[] ReadFileToBytes(string file)
|
{
|
using (FileStream fs = new FileStream(file, FileMode.Open))
|
{
|
int len = (int)fs.Length;
|
byte[] bytes = new byte[len];
|
|
fs.Read(bytes, 0, len);
|
fs.Flush();
|
|
return bytes;
|
}
|
}
|
|
/// <summary>
|
/// Get请求
|
/// </summary>
|
public static string GetData(string url)
|
{
|
/*WebClient wc = new WebClient();
|
Byte[] pageData = wc.DownloadData(url);
|
|
Encoding coding = Encoding.GetEncoding("UTF-8");
|
string str = coding.GetString(pageData);
|
|
return str;*/
|
|
Uri uri = new Uri(url);
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
|
request.Method = "GET";
|
request.ContentType = "application/x-www-form-urlencoded";
|
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
|
string str = reader.ReadToEnd();
|
reader.Close();
|
|
return str;
|
}
|
|
/// <summary>
|
/// Post请求
|
/// string data = string.Format("token={0}&f=json&where={1}", Token, "");
|
/// </summary>
|
public static string PostData(string url, string data)
|
{
|
Uri uri = new Uri(url);
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
|
request.Method = "POST";
|
request.ContentType = "application/x-www-form-urlencoded";
|
|
if (data != null)
|
{
|
byte[] bytes = Encoding.UTF8.GetBytes(data);
|
request.ContentLength = bytes.Length;
|
Stream outstream = request.GetRequestStream();
|
outstream.Write(bytes, 0, bytes.Length);
|
outstream.Flush();
|
outstream.Close();
|
}
|
|
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
|
string result = reader.ReadToEnd();
|
reader.Close();
|
|
return result;
|
}
|
#endregion
|
}
|
}
|