c# - GDI+ 中发生一般错误

标签 c# image uploading

A 有一个图像上传功能,可以在本地主机上正常工作,但是当我尝试在 Windows Server 2003 下运行时,我收到错误消息

这是代码..

现在,在有人攻击我之前;)我已经查看了之前的答案,并且检查了所有权限,它们似乎是正确的..文件夹/路径存在,等等..

ImageService imageService = new ImageService();

if (fileBase != null && fileBase.ContentLength > 0 && fileBase.ContentLength <= 2097152 && fileBase.ContentType.Contains("image/"))
{
    var uploadedPath = "~/Assets/Images/";

    Path.GetExtension(fileBase.ContentType);
    var extension = Path.GetExtension(fileBase.FileName);

    if (extension.ToLower() != ".jpg" && extension.ToLower() != ".gif") // only allow these types
    {
        photoViewModel.ImageValid = "Not Valid";
        ModelState.AddModelError("Photo", "Wrong Image Type");
        return View(photoViewModel);
    }

    EncoderParameters encodingParameters = new EncoderParameters(1);
    encodingParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);

    ImageCodecInfo jpgEncoder = imageService.GetEncoderInfo("image/jpeg");
    var uploadedimage = Image.FromStream(fileBase.InputStream, true, true);

    Bitmap originalImage = new Bitmap(uploadedimage);
    Bitmap newImage = new Bitmap(originalImage, 274, 354);

    Graphics g = Graphics.FromImage(newImage);
    g.InterpolationMode = InterpolationMode.HighQualityBilinear;
    g.DrawImage(originalImage, 0, 0, newImage.Width, newImage.Height);

    var streamLarge = new MemoryStream();
    newImage.Save(streamLarge, jpgEncoder, encodingParameters);

    var fileExtension = Path.GetExtension(extension);
    string newname;
    if (photoViewModel.photoURL != null)
    { newname = photoViewModel.photoURL; }
    else
    { newname = Guid.NewGuid() + fileExtension; }

    var ImageName = newname;
    newImage.Save(Server.MapPath(uploadedPath) + ImageName);
    System.IO.File.WriteAllBytes(Server.MapPath(uploadedPath) + ImageName, streamLarge.ToArray());

    photoViewModel.uploadedPath = uploadedPath;
    photoViewModel.photoURL = ImageName;

    originalImage.Dispose();
    newImage.Dispose();
    streamLarge.Dispose();
    return View(photoViewModel);
}

最佳答案

使用Image.FromStream,流必须在图像的生命周期内保持打开状态。这意味着如果流是一个文件,该文件将保持打开状态。我认为您需要处置 uploadedImage 以允许关闭流(如果您等待 GC 清理 uploadedImage,这将在未来的不确定点发生 - 或者可能根本不会发生)。

关于c# - GDI+ 中发生一般错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8740893/

相关文章:

c# - 如何发送带有查询字符串(包含 url 作为查询字符串)的 url 作为查询字符串

Android 如何从我的应用程序使用 SD 卡中的文件路径预览图像

iphone - Xcode 4.5 iOS 6 错误上传到 iTunes

c# - Specflow - 对任何关键字使用相同的步骤定义

c# - Selenium WebDriver - 如果元素存在则选择它,如果不存在则忽略它并继续下一个元素

加载程序后的 Javascript 图像

google-app-engine - 如何操作谷歌应用引擎数据存储中的文件

iOS App Store bundle 版本比较规则

c# - 应用程序代码中 try-catch block 无法捕获的异常

Android - 拆分可绘制对象