views:

31

answers:

1

Hi all,

I'm running into a problem with my app (ASP.NET MVC 2) where I can't upload files (images in my case). I've changed the web.config to accept up to 20MB, and I'm trying to upload a file that's only 3MB.

The app itself has two ways to upload. The initial upload which starts a Gallery and then an additional upload to append to a Gallery.

The initial works like a charm, but the appending one fails with no explanation. Even if I re-upload the initial image as an append it still fails.

I'm a little stuck on this so I would appreciate any help you guys can offer.

Thanks in advance!

EDIT

If I "hack" the form with Firebug and direct it to the initial upload Url it works, but when it's directing to the Url it should be posting to it fails...

EDIT 2

Per Rob's request, here's the code handling the initial gallery and appending image:

[HttpPost, ValidateAntiForgeryToken]
public RedirectToRouteResult PutGallery(    //  Move to Ajax
    [Bind(Prefix = "Gallery", Include = "ClubId,EventId,RHAccountId,RHCategoryId,Year")] Gallery Gallery,
    HttpPostedFileBase File) {
    if (ModelState.IsValid && (File.ContentLength > 0)) {
        if (Gallery.RHAccountId > 0) {
            Gallery.RHUser = this.fdc.RHAccounts.Single(
                a =>
                    (a.RHAccountId == Gallery.RHAccountId)).RHUser;
        } else {
            if (!this.fdc.RHUsers.Any(
                u =>
                    (u.User.Name == Gallery.Username))) {
                if (!this.fdc.Users.Any(
                    u =>
                        (u.Name == Gallery.Username))) {
                    Gallery.RHUser = new RHUser() {
                        User = new User() {
                            Name = Gallery.Username
                        }
                    };
                } else {
                    Gallery.RHUser = new RHUser() {
                        User = this.fdc.Users.Single(
                            u =>
                                (u.Name == Gallery.Username))
                    };
                };
            } else {
                Gallery.RHUser = this.fdc.RHUsers.Single(
                    u =>
                        (u.User.Name == Gallery.Username));
            };
        };

        Image Image = new Image() {
            Gallery = Gallery
        };

        this.fdc.Galleries.InsertOnSubmit(Gallery);
        this.fdc.Images.InsertOnSubmit(Image);
        this.fdc.SubmitChanges();

        Files.Save(Image.ImageId, File);

        return RedirectToAction("Default", "Site");
    } else {
        return RedirectToAction("Default", "Site");
    };
}

[HttpPost, ValidateAntiForgeryToken]
public RedirectToRouteResult PutImage(
    [Bind(Prefix = "Image", Include = "GalleryId")] Image Image,
    HttpPostedFileBase File) {
    Gallery Gallery = this.fdc.Galleries.Single(
        g =>
            (g.GalleryId == Image.GalleryId));

    if (File.ContentLength > 0) {
        this.fdc.Images.InsertOnSubmit(Image);
        this.fdc.SubmitChanges();

        Files.Save(Image.ImageId, File);
    };

    return RedirectToAction("Gallery", "Site", new {
        Category = Gallery.RHCategory.Category.EncodedName,
        GalleryId = Gallery.GalleryId
    });
}

SIDENOTE:

Could Cassini, VS 2010's built in web server, be the cause?

A: 

Ok, so I figured it out, it only took a lengthy install of IIS locally on my machine + the configuration, to have it tell me that I miss-spelled controller as controlls in the routes.

Really annoying that it took all of that to get the real error, so Cassini was partially at fault...

So, the moral of the story is, make sure you spell everything correctly.

Alex