开发者

Problem saving an uploaded image

开发者 https://www.devze.com 2022-12-21 05:49 出处:网络
This is my first question.Thanks to everyone who contributes to this site, it\'s been a huge help as I try to teach myself programming.

This is my first question. Thanks to everyone who contributes to this site, it's been a huge help as I try to teach myself programming.

I'm having a problem saving an uploaded image. I think I'm doing something wrong with the image.save function. My code is as follows:

Controller:

[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();
    }

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>
<% } %>

The stack trace is as follows:

    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\TestControl开发者_StackOverflowler.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 

Thanks so much for the help!


Are you trying to convert the image to a JPEG?

If not, you should just call pic.Save(@"C:\text.jpg").

You might be getting the error because ASP.Net does not have write access to the root of the C: drive. (GDI+ can give funny errors)
How and where is this code being run? (Cassini? IIS?)


I would just figure out where you want to store it relative to the web server, translate that to the file server, and then save it.

string relativePath = "~/somefolder/somefile.ext";
string diskPath = ControllerContext.HttpContext.Server.MapPath(newFileWebPath);
pic.SaveAs(diskPath);
0

精彩评论

暂无评论...
验证码 换一张
取 消