You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
3.9 KiB
130 lines
3.9 KiB
4 years ago
|
<%@ WebHandler Language="C#" Class="getRemoteImage" %>
|
||
|
/**
|
||
|
* Created by visual studio 2010
|
||
|
* User: xuheng
|
||
|
* Date: 12-3-8
|
||
|
* Time: 下午13:33
|
||
|
* To get the Remote image.
|
||
|
*/
|
||
|
using System;
|
||
|
using System.Web;
|
||
|
using System.Collections;
|
||
|
using System.Text.RegularExpressions;
|
||
|
using System.Net;
|
||
|
using System.IO;
|
||
|
|
||
|
public class getRemoteImage : IHttpHandler
|
||
|
{
|
||
|
|
||
|
public void ProcessRequest(HttpContext context)
|
||
|
{
|
||
|
string savePath = "upload/"; //保存文件地址
|
||
|
string[] filetype = { ".gif", ".png", ".jpg", ".jpeg", ".bmp" }; //文件允许格式
|
||
|
int fileSize = 3000; //文件大小限制,单位kb
|
||
|
|
||
|
string uri = context.Server.HtmlEncode(context.Request["upfile"]);
|
||
|
uri = uri.Replace("&", "&");
|
||
|
string[] imgUrls = Regex.Split(uri, "ue_separate_ue", RegexOptions.IgnoreCase);
|
||
|
|
||
|
ArrayList tmpNames = new ArrayList();
|
||
|
WebClient wc = new WebClient();
|
||
|
HttpWebResponse res;
|
||
|
String filename = String.Empty;
|
||
|
String imgUrl = String.Empty;
|
||
|
String currentType = String.Empty;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
for (int i = 0, len = imgUrls.Length; i < len; i++)
|
||
|
{
|
||
|
imgUrl = imgUrls[i];
|
||
|
|
||
|
if (imgUrl.Substring(0, 7) != "http://")
|
||
|
{
|
||
|
tmpNames.Add("error!");
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
//格式验证
|
||
|
int temp = imgUrl.LastIndexOf('.');
|
||
|
currentType = imgUrl.Substring(temp).ToLower();
|
||
|
if (Array.IndexOf(filetype, currentType) == -1)
|
||
|
{
|
||
|
tmpNames.Add("error!");
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
res = (HttpWebResponse)WebRequest.Create(imgUrl).GetResponse();
|
||
|
//http检测
|
||
|
if (res.ResponseUri.Scheme.ToLower().Trim() != "http")
|
||
|
{
|
||
|
tmpNames.Add("error!");
|
||
|
continue;
|
||
|
}
|
||
|
//大小验证
|
||
|
if (res.ContentLength > fileSize * 1024)
|
||
|
{
|
||
|
tmpNames.Add("error!");
|
||
|
continue;
|
||
|
}
|
||
|
//死链验证
|
||
|
if (res.StatusCode != HttpStatusCode.OK)
|
||
|
{
|
||
|
tmpNames.Add("error!");
|
||
|
continue;
|
||
|
}
|
||
|
//检查mime类型
|
||
|
if (res.ContentType.IndexOf("image") == -1)
|
||
|
{
|
||
|
tmpNames.Add("error!");
|
||
|
continue;
|
||
|
}
|
||
|
res.Close();
|
||
|
|
||
|
var filepath = savePath + DateTime.Now.ToString("yyyy-MM-dd") + "/";
|
||
|
|
||
|
//创建保存位置
|
||
|
if (!Directory.Exists(context.Server.MapPath(filepath)))
|
||
|
{
|
||
|
Directory.CreateDirectory(context.Server.MapPath(filepath));
|
||
|
}
|
||
|
|
||
|
//写入文件
|
||
|
filename = filepath + System.Guid.NewGuid() + currentType;
|
||
|
wc.DownloadFile(imgUrl, context.Server.MapPath(filename));
|
||
|
tmpNames.Add(filename);
|
||
|
}
|
||
|
}
|
||
|
catch (Exception)
|
||
|
{
|
||
|
tmpNames.Add("error!");
|
||
|
}
|
||
|
finally
|
||
|
{
|
||
|
wc.Dispose();
|
||
|
}
|
||
|
context.Response.Write("{url:'" + converToString(tmpNames) + "',tip:'远程图片抓取成功!',srcUrl:'" + uri + "'}");
|
||
|
}
|
||
|
|
||
|
//集合转换字符串
|
||
|
private string converToString(ArrayList tmpNames)
|
||
|
{
|
||
|
String str = String.Empty;
|
||
|
for (int i = 0, len = tmpNames.Count; i < len; i++)
|
||
|
{
|
||
|
str += tmpNames[i] + "ue_separate_ue";
|
||
|
if (i == tmpNames.Count - 1)
|
||
|
str += tmpNames[i];
|
||
|
}
|
||
|
return str;
|
||
|
}
|
||
|
|
||
|
public bool IsReusable
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|