我正在努力解决一个大规模回答的问题,但没有一个给定的解决方案对我有用。 我有一个ASP.NET WebForms应用程序,我想存储图片,并能够检索它,更改旋转,删除等... 问题是在我的开发环境中一切正常(使用visual studio甚至在我的本地机器上使用IIS 8.5)但是当我尝试在生产服务器(IIS 10.0)上部署它时,我甚至无法上传图片,我只能看图片。 如果我尝试保存,旋转或删除图像,我会收到GDI +泛型错误。 它让我觉得它是配置或权限问题,因为应用程序与我的机器上的应用程序相同,并且工作正常。
我尝试过:
让我感到不安的是,我在同一个应用程序中有一个文件上传目录(不是图片)而且它有效,所以我猜权限是正常的,我对两个目录都拥有相同的权限。
以下是我上传图片的代码:
public static Int64 InsertPhoto(Photo maPhoto)
{
////////////////////////////////////////////////
// ETAPE 1 : Récupération du numéro de photo
////////////////////////////////////////////////
try
{
int? numero = PecV2.DAL.Photo.GetNumeroPhotoMaxByIDIntervention(maPhoto.IDIntervention);
if (numero.HasValue)
{
maPhoto.Numero = numero.Value + 1;
}
else
{
maPhoto.Numero = 0;
}
////////////////////////////////////////////////
// ETAPE 2 : Génération des miniatures
////////////////////////////////////////////////
Intervention monIntervention = Intervention.GetIntervention(maPhoto.IDIntervention);
maPhoto.IDImmeuble = monIntervention.IDImmeuble;
maPhoto.FileName = maPhoto.IDImmeuble.ToString() + "_" + maPhoto.IDIntervention.ToString() + "_" + maPhoto.Numero.ToString() + ".jpg";
maPhoto.EnregistrerMiniature(maPhoto.PhotoFull, global::PecV2.BL.Properties.Settings.Default.LargeurPhotoMedium, global::PecV2.BL.Properties.Settings.Default.RepertoirePhotosMedium, maPhoto.FileName);
maPhoto.EnregistrerMiniature(maPhoto.PhotoFull, global::PecV2.BL.Properties.Settings.Default.LargeurPhotoSmall, global::PecV2.BL.Properties.Settings.Default.RepertoirePhotosSmall, maPhoto.FileName);
// Encoder...
EncoderParameters encParams = new EncoderParameters(1);
encParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)100);
// Codec...
ImageCodecInfo codecJpeg = null;
foreach (ImageCodecInfo codec in ImageCodecInfo.GetImageEncoders())
if (codec.MimeType == "image/jpeg")
codecJpeg = codec;
//GC.Collect();
maPhoto.PhotoFull.Save(Path.Combine(global::PecV2.BL.Properties.Settings.Default.RepertoirePhotosFull, maPhoto.FileName), codecJpeg, encParams);
}
catch (Exception ex)
{
throw ex;
}
////////////////////////////////////////////////
// ETAPE 3 : Enregistrement en base
////////////////////////////////////////////////
return PecV2.DAL.Photo.InsertPhoto(maPhoto.IDImmeuble,
maPhoto.IDIntervention,
maPhoto.Remarques,
maPhoto.Date,
maPhoto.Numero,
maPhoto.FileName);
}
private void EnregistrerMiniature(Bitmap PhotoSource, int DimMax, string RepertoireDestination, string NomFichier)
{
double RatioMedium;
// détermination de l'orientation de la photo originale
if (PhotoSource.Width >= PhotoSource.Height)
{
// photo horizontale
RatioMedium = PhotoSource.Width / DimMax;
//
}
else
{
// photo verticale
RatioMedium = PhotoSource.Height / DimMax;
}
if (RatioMedium < 1)
RatioMedium = 1;
// Generation de la photo medium
Int32 dW;
Int32 dH;
// Calcul de la résolution de la vignette par rapport à la largeur
dW = (Int32)Math.Round(PhotoSource.Width / RatioMedium);
dH = (Int32)Math.Round(PhotoSource.Height / RatioMedium);
Bitmap bVignetteMedium = new Bitmap(dW, dH, PixelFormat.Format32bppRgb);
using (Graphics g = Graphics.FromImage((Image)bVignetteMedium))
{
// Temp pour supprimer bordure (G+H) noire
SolidBrush br = new SolidBrush(Color.White);
g.FillRectangle(br, 0, 0, dW, dH);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed;
g.DrawImage(PhotoSource, 0, 0, dW, dH);
}
// Encoder...
EncoderParameters encParams = new EncoderParameters(1);
encParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)100);
// Codec...
ImageCodecInfo codecJpeg = null;
foreach (ImageCodecInfo codec in ImageCodecInfo.GetImageEncoders())
if (codec.MimeType == "image/jpeg")
codecJpeg = codec;
//Enregistrement de la vignette
try
{
bVignetteMedium.Save(Path.Combine(RepertoireDestination, NomFichier), codecJpeg, encParams);
bVignetteMedium.Dispose();
}
catch (Exception)
{
throw;
}
}
这是完整的eror堆栈(btnEnregistrer_Click调用InsertPhoto):
[ExternalException (0x80004005): Une erreur générique s'est produite dans GDI+.]
PecV2.WebApp.Intervention.Onglets.o07_Photos.btnEnregistrer_Click(Object sender, EventArgs e) +509
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +11802193
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +150
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1735
----------------------------------------------- -UPDATE ----------------------------------------------- < / p>
我发现了问题的来源,这是一个web.config问题,我试图打开'照片'目录而不是'照片'目录......请不要嘲笑我!我不知道我怎么错过那个X'D
非常感谢,Nicolas。
答案 0 :(得分:1)
我发现了问题的来源,这是一个web.config问题,我试图打开'照片'目录而不是'照片'目录......请不要嘲笑我!我不知道我怎么错过那个X'D