代码之家  ›  专栏  ›  技术社区  ›  Solomon

保存上载的图像时出现问题

  •  2
  • Solomon  · 技术社区  · 16 年前

    这是我的第一个问题。感谢所有为这个网站做贡献的人,这对我自学编程是一个巨大的帮助。

    我在保存上传的图像时遇到问题。我想我的image.save功能有问题。我的代码如下:

    控制器:

    [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Index(string fileName, HttpPostedFileBase pic)
        {
            string mimeType = pic.ContentType;
            byte[] imagedata = new byte[pic.ContentLength];
            pic.InputStream.Read(imagedata, 0, pic.ContentLength);
            Image outfitImage = (Image.FromStream(new MemoryStream(imagedata)));
            string filePath = @"c:\test.jpg";
            outfitImage.Save(filePath);
            return View();
        }
    

    视图:

    <% using (Html.BeginForm("Index","Test" ,FormMethod.Post,new {enctype="multipart/form-data"})) {%>
    
        <fieldset>
            <legend>Fields</legend>
         <p>
                <label for="fileName">Name:</label>
                <%= Html.TextBox("fileName") %>
         </p>
         <p>
            Upload new image: <input type="file" name="pic" />
         </p>
         <p>
                <input type="submit" value="Create" />
         </p>
        </fieldset>
    <% } %>
    

    堆栈跟踪如下所示:

        Server Error in '/' Application.
    A generic error occurred in GDI+.
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
    
    Exception Details: System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
    
    Source Error:
    
    Line 51:             
    Line 52:             string filePath = @"c:\test.jpg";
    Line 53:             outfitImage.Save(filePath);
    Line 54: 
    Line 55:             return View();
    
    
    Source File: C:\Users\Solomon\SolomonApp\AmIStylin\AmIStylin\Controllers\TestController.cs    Line: 53
    
    Stack Trace:
    
    [ExternalException (0x80004005): A generic error occurred in GDI+.]
       System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) +377630
       System.Drawing.Image.Save(String filename, ImageFormat format) +69
       System.Drawing.Image.Save(String filename) +25
       AmIStylin.Controllers.TestController.Index(String fileName, HttpPostedFileBase pic) in C:\Users\Solomon\SolomonApp\AmIStylin\AmIStylin\Controllers\TestController.cs:53
       lambda_method(ExecutionScope , ControllerBase , Object[] ) +205
       System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17
       System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +178
       System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +24
       System.Web.Mvc.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7() +52
       System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +254
       System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +19
       System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +192
       System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +399
       System.Web.Mvc.Controller.ExecuteCore() +126
       System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +27
       System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
       System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +151
       System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +57
       System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7
       System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181
       System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
    
    
    Version Information: Microsoft .NET Framework Version:2.0.50727.4062; ASP.NET Version:2.0.50727.3074 
    

    非常感谢你的帮助!

    3 回复  |  直到 16 年前
        1
  •  2
  •   SLaks    16 年前

    您正在尝试将图像转换为JPEG格式吗?

    如果没有,你应该打电话 pic.Save(@"C:\text.jpg") .

    您可能会收到错误,因为ASP.Net没有对C:驱动器根目录的写入权限(GDI+可以给出有趣的错误)
    这段代码是如何运行的,在哪里运行的(卡西尼号?IIS?)

        2
  •  2
  •   bkaid    16 年前

    我只想找出相对于web服务器的存储位置,将其转换为文件服务器,然后保存它。

    string relativePath = "~/somefolder/somefile.ext";
    string diskPath = ControllerContext.HttpContext.Server.MapPath(newFileWebPath);
    pic.SaveAs(diskPath);
    
        3
  •  -1
  •   Community Mohan Dere    9 年前