2

我正在尝试通过 Asp.Net 使用 jquery blueimp 多文件上传。经过两天不成功的尝试,我决定问也许有人会分享这个工作示例。

我会很感激。

4

1 回答 1

4

您可以使用确切的演示文件,而不必使用之前评论中链接的 .NET 示例。将表单操作链接更改为指向您创建的 handler.ashx 文件。

因此,在 index.html 的表单中,将 url 添加到您作为操作创建的处理程序中:

<form id="fileupload" action="GongosHandler.ashx" method="POST" enctype="multipart/form-data">

然后做一个基本的处理程序,编码如下:

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "text/plain";//"application/json";
    var r = new System.Collections.Generic.List<ViewDataUploadFilesResult>();


    for (var x = 0; x < context.Request.Files.Count; x++)
    {
        HttpPostedFile hpf = context.Request.Files[x] as HttpPostedFile;
        string FileName = string.Empty;
        if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE")
        {
            string[] files = hpf.FileName.Split(new char[] { '\\' });
            FileName = files[files.Length - 1];
        }
        else
        {
            FileName = hpf.FileName;
        }
        if (hpf.ContentLength == 0)
            continue;
        string savedFileName = context.Server.MapPath("~/Uploads/" + FileName);
        try
        {
            hpf.SaveAs(savedFileName);
        }
        catch (Exception ex)
        {

        }


        r.Add(new ViewDataUploadFilesResult()
        {
            thumbnailUrl = savedFileName,
            name = FileName,
            length = hpf.ContentLength,
            type = hpf.ContentType,
            url =  string.Format("/Uploads/{0}", FileName),
            deleteUrl =  string.Format("/Uploads/{0}", FileName) 
        });
        var uploadedFiles = new
        {
            files = r.ToArray()
        };

        //was returning a new json string everytime, so then duplicating if 
        //sending multiple files. Example, file 1 was in first position,
        //then file 1 & 2 in second position, and so on. So, I only grab,
        //the last JSON instance to get all files.
        if (x  == (context.Request.Files.Count - 1))
        {
            var jsonObj = JsonConvert.SerializeObject(uploadedFiles, Formatting.Indented);
            string jsonHttpOutputStream = jsonObj.ToString();

            context.Response.Write(jsonHttpOutputStream);
        }
    }

}

public bool IsReusable
{
    get
    {
        return false;
    }
}

}

public class ViewDataUploadFilesResult
{
    public string thumbnailUrl { get; set; }
    public string name { get; set; }
    public int length { get; set; }
    public string type { get; set; }
    public string url { get; set; }
    public string deleteUrl { get; set; }
}

在基本层面上,这将渲染和工作。然后,你必须在这里和那里调整一些代码,让它按照你想要的方式运行。但是,此处理程序是正确处理上传所需的全部内容。祝你好运!

于 2013-11-22T18:17:55.120 回答