ASP.Net MVC image upload failing in Google Chrome
I have an image upload form
<% using (Html.BeginForm("PictureValidateAndSave", "UserGallery", new {}, FormMethod.Post, new { enctype = "multipart/form-data"})) { %>
<table>
<tr>
<td> Album Name: </td>
<td> <%= Html.DropDownList("albumList") %></td>
</tr>
<tr>
<td> File Location: </td>
<td> <input type="file" name="picture" accept="image/gif, image/jpeg" /> </td>
<tr>
<tr>
<td> Picture name: </td>
<td> <input name="pictureName" style="width: 147px;"/> </td>
</tr>
</table>
<p> <input type="submit" value="Save" /> </p>
<% } %>
That posts back to the action
public ActionResult PictureValidateAndSave(long albumList, HttpPostedFileBase picture, string pictureName)
The code works accross all browsers but Google Chrome. My IDE is Visual Studio 2k8, and I haven't figured out how to debug on Google Chrome with it, however, I am throwing error messages, and I know that for some reason under chrome, the following check doesn't pass:
string mimeType = picture.ContentType;
// Check for the correct mimeType to define the extension
switch (mimeType)
{
case "image/pjpeg":
mimeType = ".jpeg";
break;
case "image/png":
mimeType = ".png";
break;
case "image/x-png":
mimeType = ".png";
break;
case "image/gif":
mimeType = ".gif";
// Conversion to image
Image gifImage = Image.FromStream(picture.InputStream);
FrameDimension dimension = new FrameDimension(gifImage.FrameDimensionsList[0]);
int frameCount = gifImag开发者_JAVA技巧e.GetFrameCount(dimension);
// Reject if its an animated gif
if (frameCount > 1)
{
return RedirectToAction("UploadPicture", new { error = 3 });
}
break;
default:
return RedirectToAction("UploadPicture", new { error = 1 });
}
So apparently, under Chrome, the HttpPostedFileBase parameter picture isn't encoded right and loses its mime type, howwever, this might not be the only problem. What is excatly wrong with the HttpPostedFileBase parameter under Chrome, and how can I fix it?
Thank you for your attention, and thanks in advance for any help.
Just use hanselmans method, works perfect in chrome.
I've just debugged some of my code that uploads files to mvc and i get the exact MIME string from the HttpPostedFileBase
in Firefox as i do in Chrome: "image/jpeg" and "image/gif" respectively. So i don't think there is a problem with the browser interpreting the file type.
Take a look at this answer. It has a lot of my code in it regarding uploading and typing the 'HttpPostedFileBase' data. It might get you un-stuck.
精彩评论