这是我的第一个问题。感谢所有对本网站有所贡献的人,在我尝试教授自己的编程时,这是一个巨大的帮助。保存上传图片的问题
我在保存上传图片时遇到问题。我认为我在做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
感谢这么多的帮助!
您应该在循环中调用'pic.InputStream.Read',因为它不能保证一次全部读取。 (检查它的返回值) – SLaks 2010-02-24 04:17:45
谢谢SLaks。我到底该怎么做? – Solomon 2010-02-24 16:24:25