我在图像文件夹中的服务器中有一些图像文件
当URL中请求的图像不存在时,我想获得调整大小的图像版本
我有wirtten代码来重新调整原始图像的大小。
但是当我从url发送请求时,我不知道如何执行此操作,例如
当我输入http://example.com/Image/a_140_140.jpg
时,如果有名称的文件a.jpg使用我的代码创建一个名为a_140_140.jpg
的已调整大小的图像并将其返回给客户端。
但现在我得到404 Error
请帮助我如何做这项工作永远不会得到404错误。
我不会在我的应用中添加更多路线
答案 0 :(得分:2)
您可以尝试在IIS中使用404错误转发吗?
答案 1 :(得分:2)
我提供使用以下解决方案:
我使用Asp.net MVC
但是通过一些更改,您可以将其用于每个网站
1.将以下行添加到web.config
<httpErrors>
<remove statusCode="404" />
<error statusCode="404" path="/Home/Http404/" responseMode="ExecuteURL" />
</httpErrors>
2。将此路由添加到Routeconfig.cs
routes.MapRoute(
"404-PageNotFound",
"{*url}",
new { controller = "Home", action = "Http404" });
3。对于控制器代码,请使用以下代码:
[MySite.WebUI.Infrastructure.AjaxCrawlable]
public ActionResult Index()
{
string url = Request.Url.AbsolutePath;
if (url.LastIndexOf('.') != -1)
{
string extention = url.Substring(url.LastIndexOf('.') + 1).ToLower();
var extentionList = new string[] { "jpg", "png", "gif", "tif" };
if (extentionList.Contains(extention))
{
try
{
string path = System.Web.Hosting.HostingEnvironment.MapPath(Request.Url.AbsolutePath);
string FileName = System.IO.Path.GetFileNameWithoutExtension(path);
string extentionnow = System.IO.Path.GetExtension(path);
var _mainpath = Request.Url.AbsolutePath.Substring(0, Request.Url.AbsolutePath.LastIndexOf("/"));
string _mainfileName = FileName.Substring(0, (FileName.LastIndexOf('_')));
int _imagesize = int.Parse(FileName.Substring((FileName.LastIndexOf('_') + 1)));
if (_imagesize != null || _imagesize != 0)
{
var t = Resize.FindResizeImage("~" + _mainpath + "/" + _mainfileName + extentionnow, _imagesize);
return new RedirectResult(Request.Url.AbsolutePath);
}
}
catch
{
return View();
}
}
}
else
return View();
return View();
}
使用系统; 使用System.Collections.Generic; 使用System.Drawing; 使用System.Drawing.Drawing2D; 使用System.IO; 使用System.Linq; 使用System.Web; 使用System.Web.Mvc;
namespace MySite.WebUI.Models
{
public static class Resize
{
public static string FindResizeImage(string path, int size)
{
var _serverpath = HttpContext.Current.Server.MapPath(path);
if (System.IO.File.Exists(_serverpath))
{
var Extention = Path.GetExtension(path);
var _pathresize = path.Substring(0, path.LastIndexOf(".")) + "_" + size.ToString() + Extention;
var _serverpathresize = HttpContext.Current.Server.MapPath(_pathresize);
if (System.IO.File.Exists(_serverpathresize))
{
return _pathresize.Substring(1, _pathresize.Length - 1);
}
else
{
Resize.Resizeing(HttpContext.Current.Server.MapPath(path), HttpContext.Current.Server.MapPath(_pathresize), size);
return _pathresize;
}
}
return null;
}
public static void Resizeing(string imageFile, string outputFile, int size)
{
using (var srcImage = Image.FromFile(imageFile))
{
using (var newImage = new Bitmap(size, size))
using (var graphics = Graphics.FromImage(newImage))
{
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.DrawImage(srcImage, new Rectangle(0, 0, size, size));
newImage.Save(outputFile);
}
}
}
}
}