Возникли проблемы с вызовом метода Post Controller - PullRequest
1 голос
/ 28 июня 2009

Вот мой метод

    [AcceptVerbs(HttpVerbs.Post)]
    public void SaveImage(FormCollection formValues)
    {
        byte[] contents = Convert.FromBase64String(Request.Form["file"]);
        System.IO.File.WriteAllBytes(Server.MapPath(Request.Form["name"]), contents);
    }

Он публикуется из этого метода actionScript:

    public function encodeAndSave(e:MouseEvent = null):void
    {
        var date:Date = new Date();
        var by:ByteArray = PNGEnc.encode(canvas.main_bdata);
        var req:URLRequest = new URLRequest(server_path+"Home/SaveImage");
        var params:URLVariables = new URLVariables();
        params.file = Base64.encodeByteArray(by);
        params.name = "MyImage.png";
        req.method = URLRequestMethod.POST;
        req.data = params;
        var ldr:URLLoader = new URLLoader(req);

        ldr.addEventListener(Event.COMPLETE, complete);

        ldr.load(req);

        function complete(e:Event):void
        {
            navigateToURL(new URLRequest("?" + Math.random()), "_self");

        }

    }

Но при запуске метода encodeAndSave файл не сохраняется на сервере ...

Кто-нибудь знает, как определить, запускался ли метод SaveImage? Кроме того, когда я печатаю: http://www.mysite.com/Home/SaveImage в адресной строке написано "Ресурс не найден".

У кого-нибудь есть идеи относительно того, почему он это делает или что я могу сделать, чтобы попытаться это выяснить?

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать, и я обновлю свой вопрос.

Спасибо,
Matt

1 Ответ

7 голосов
/ 29 июня 2009

У меня было [много] проблем с этим, и я использовал это в конце;

View

<% using (Html.BeginForm( "PhotoAdd", "Photos", FormMethod.Post, new { enctype = "multipart/form-data" }))   { %>

<input type="file" id="file" name="file" class="field" style="width:300px;"/>

<%} %>

Контроллер

var file = Request.Files["file"];
byte[] buf = new byte[file.ContentLength];
file.InputStream.Read(buf, 0, file.ContentLength);

Я не уверен, что это то, что вы ищете, но, как я уже сказал, у меня много проблем, позволяющих пользователям загружать свои фотографии на мой сайт.

По сути, у меня есть View, который содержит поле типа «file» и кнопку «Submit» для события post back.

Тогда в контроллере у меня есть следующее:

    [AcceptVerbs( HttpVerbs.Post ), Authorize]
    public ActionResult PhotoAdd(FormCollection collection)
    {
        try
        {
            var file = Request.Files["file"];

            byte[] buf = new byte[file.ContentLength];
            file.InputStream.Read(buf, 0, file.ContentLength);

Трудность, с которой я столкнулся, заключалась в том, чтобы заставить контроллер получить запрос вместе с именем файла и путем. После этого я смог преобразовать файл в массив байтов, который затем мог бы сохранить в базе данных SQL и поле изображения.

Единственное, чего мне не хватало, так это метода Form в View, который должен читаться как

<% using (Html.BeginForm( "PhotoAdd", "Photos", FormMethod.Post, new { enctype = "multipart/form-data" }))   { %>

Enctype позволяет вам выбрать имя файла и путь к выбранному файлу, чтобы контроллер мог захватить входной поток. Без него я обнаружил, что либо Request.Files был пуст, либо он содержал только имя файла и, следовательно, не мог его открыть.

Как только вы сохранили изображение в своей базе данных, его отображение будет пустяком.

Надеюсь, это ответит на ваш вопрос.

...