загрузить файл, используя jquery и обработчик (ashx) - PullRequest
8 голосов
/ 11 декабря 2011

Я пытаюсь загрузить файл, используя jquery ajax с обработчиком (c #).Проблема в том, что когда я вызываю обработчик, я получаю

context.Request.File.Count=0

Вот код aspx:

<!--aspx file code-->
<script language="javascript" type="text/javascript">
$().ready(function () 
{
    $('#save').click(function (e)
    {
        CalluploaderHandler();
    });
});

function CalluploaderHandler()
{
    $.ajax({
                type: "POST",
                url: "Services/UPloader.ashx",
                contentType: "application/json; charset=utf-8",
                success: OnComplete,
                error: OnFail
            });
    return false;
}

function OnComplete(result)
{
    alert('Success');
}

function OnFail(result)
{
    alert('Request failed');
}

</script>
    </head>
        <body>
            <form  enctype="multipart/form-data">
                <label for="file">
                Filename:</label>
                <input name="file" id="file" type="file">
                <input id="save" name="submit" value="Submit" type="submit">
            </form>
        </body>
    </html>    

Обработчик кода c #:

/* handler*/
public void ProcessRequest(HttpContext context)
{
    string savedFileName = "";

    foreach (string file in context.Request.Files)
    {
        HttpPostedFile hpf = context.Request.Files[file] as HttpPostedFile;
        if (hpf.ContentLength == 0)
            continue;
        // savedFileName = context.Server.MapPath(Path.GetFileName(hpf.FileName));
        // hpf.SaveAs(savedFileName);
    }
    context.Response.Write(savedFileName);
}

Ответы [ 3 ]

3 голосов
/ 01 июля 2014

Вы можете добавить этот вид кода в файл обработчика.Затем вы можете публиковать на этот URL-адрес (whatroot / yourhandler.ashx)

Тип содержимого должен быть «multipart / form-data».Например: если вы используете тег HTML-формы, тогда enctype = "multipart / form-data".

public void ProcessRequest(HttpContext context)
{
        var result = "0";
        try
        {
            if (context.Request.Files.Count > 0)
            {
                HttpPostedFile file = null;

                for (int i = 0; i < context.Request.Files.Count; i++)
                {
                    file = context.Request.Files[i];
                    if (file.ContentLength > 0)
                    {
                        var fileName = Path.GetFileName(file.FileName);
                        var path = Path.Combine(<somepath>, fileName);
                        file.SaveAs(path);
                        result = "1"; 
                    }
                }    

            }
        }
        catch { }
      context.Response.Write(result);
}
3 голосов
/ 12 декабря 2011

я думаю, что проблема с contentType попыткой

contentType: 'multipart/form-data',

OR

contentType :'application/octet-stream';

см. Этот пост для получения дополнительной информации

Отправка multipart / formdata с помощью jQuery.ajax

2 голосов
/ 10 марта 2015

Ваш код ...

$.ajax({
    type: "POST",
    url: "Services/UPloader.ashx",
    contentType: "application/json; charset=utf-8",
    success: OnComplete,
    error: OnFail
});

.. отсутствует параметр data.Как написано в данный момент, в обработчик ничего не отправляется.

Вам необходимо передать файл в обработчик, используя параметр data.Пожалуйста, пройдите по этой ссылке: http://www.aspdotnet -suresh.com / 2015/02 / jquery-upload-images-files-без-page-refresh-postaback-in-aspnet.html

...