1

我有以下编码来调整图像大小并将其保存到我的虚拟文件夹“vicpic/scimages”

  if (FileUpload5.PostedFile != null)
    {
        if (FileUpload5.PostedFile.ContentLength > (1024 * 1024))
        {
            Label4.Text = "Upload status: The file has to be less than 1 MB. Please resize your photo and than upload it again.";
        }
        else
        {
            System.Drawing.Image imageToBeResized = System.Drawing.Image.FromStream(FileUpload5.PostedFile.InputStream);
            int imageHeight = imageToBeResized.Height;
            int imageWidth = imageToBeResized.Width;
            int maxHeight = 660;
            int maxWidth = 560;
            imageHeight = (imageHeight * maxWidth) / imageWidth;
            imageWidth = maxWidth;
            if (imageHeight > maxHeight)
            {
                imageWidth = (imageWidth * maxHeight) / imageHeight;
                imageHeight = maxHeight;
            }
            Bitmap bitmap = new Bitmap(imageToBeResized, imageWidth, imageHeight);
            System.IO.MemoryStream stream = new MemoryStream();
            // bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
            stream.Position = 0;
            byte[] image = new byte[stream.Length + 1];
            stream.Read(image, 0, image.Length);

            string FileName = Path.GetFileName(FileUpload5.PostedFile.FileName);
            //Save files to disk
            string extension = Path.GetExtension(FileUpload5.PostedFile.FileName);
            //Path.Combine(Server.MapPath("~/vicpic/scimages"), imageName);
            string imagename = DropDownList2.SelectedItem.Text + "4" + extension;


            bitmap.Save(Server.MapPath("~/vicpic/scimages/") + imagename);

            bitmap.Dispose();
            imageToBeResized.Dispose();
            GC.Collect();



            try
            {
                con.Open();
                cmd.ExecuteNonQuery();
            }

            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }

            finally
            {
                con.Close();
                con.Dispose();
                Label4.Text = "Upload status:Successfully.";

            }
        }

    }

但它显示 GDI+ 中发生一般错误

谁能建议问题出在哪里?

我想将图像保存在我的主机服务器上的“vicpic/scimages”文件夹中。它是虚拟目录,我还授予了该目录所需的所有权限。

4

2 回答 2

4

我遇到过同样的问题。似乎在保存对象时必须打开创建对象的内存流。不要重复代码和文本,只需看看这个问答:GDI+, JPEG Image to MemoryStream 发生一般错误

因此,bitmap.Save(Server.MapPath("~/vicpic/scimages/") + imagename);您的代码可能看起来像这样:

using (var m = new MemoryStream())
{
       bitmap.Save(m, ImageFormat.Jpeg);
       var img = Image.FromStream(m);
       img.Save(Server.MapPath("~/vicpic/scimages/") + imagename);
}
于 2012-07-02T11:34:30.193 回答
0

我知道这是一个老问题,但这只是我想提供的意见,如果它可以帮助有同样问题的人,那么这就是我想要的。我在我的一个网站上遇到了这个错误,我不知道发生了什么,所以在 STACK 上找到了一些答案后,我意识到这是一个权限错误。修复后一切都很好,但后来我在我的另一个网站上遇到了同样的错误,我立即更改了文件夹的权限,但这次它没有修复它。经过几天的努力,我意识到问题只是文件夹名称拼写错误。

于 2014-08-20T06:31:53.403 回答