【问题标题】:asp.net/HTML file upload control not uploading mutiple files as expectedasp.net/HTML 文件上传控件未按预期上传多个文件
【发布时间】:2015-02-26 06:50:49
【问题描述】:

我正在使用 asp.net 文件控制。我正在上传多个文件。问题是当我选择两个或多个文件时,它只会多次上传一个文件。我的意思是,如果我选择两张不同的图片,它将两次上传第一张图片。如果我选择三张图片,那么它将上传第一张图片三次。

我的文件上传控件如下,

<asp:FileUpload  runat="server" ID="file" multiple />

我的服务器端代码如下

    protected void click(object sender, EventArgs e) {
    foreach (string s in Request.Files)
    {
        HttpPostedFile file = Request.Files[s];

        int fileSizeInBytes = file.ContentLength;
        string fileName = Request.Headers["X-File-Name"];
        string fileExtension = "";

        if (!string.IsNullOrEmpty(fileName))
            fileExtension = Path.GetExtension(fileName);

        // IMPORTANT! Make sure to validate uploaded file contents, size, etc. to prevent scripts being uploaded into your web app directory
        string savedFileName = Path.Combine(@"D:\Temp\", Guid.NewGuid().ToString() + ".jpg");
        file.SaveAs(savedFileName);
    }
}

我不知道为什么会这样。当我调试服务器端代码时,它为我提供了与“Request.Headers [”X-File-Name“]”不同的文件名称,但不知何故它正在上传相同的内容(我尝试上传的多个图像中的第一个图像)

【问题讨论】:

    标签: html asp.net .net file-upload server-side


    【解决方案1】:

    如果您像这样使用 ASP.NET > 4.0,则可以从文件上传控件中获取发布的文件

    foreach (HttpPostedFile f in file.PostedFiles)
            { 
            //HttpPostedFile file = Request.Files[s];
    
            int fileSizeInBytes = f.ContentLength;
            string fileName = f.FileName;
            string fileExtension = "";
    
            if (!string.IsNullOrEmpty(fileName))
                fileExtension = Path.GetExtension(fileName);
    
            // IMPORTANT! Make sure to validate uploaded file contents, size, etc. to prevent scripts being uploaded into your web app directory
            string savedFileName = Path.Combine(@"D:\Temp\", Guid.NewGuid().ToString() + ".jpg");
            f.SaveAs(savedFileName);
        }
    

    使用 ASP.NET 4.0 或更低版本也可用于 4.0 及更高版本

    HttpFileCollection fc = Request.Files;
    
        for (int i = 0; i < fc.Count; i++)
        {
            HttpPostedFile f = fc[i];
            int fileSizeInBytes = f.ContentLength;
            string fileName = f.FileName;
            string fileExtension = "";
    
            if (!string.IsNullOrEmpty(fileName))
                fileExtension = Path.GetExtension(fileName);
    
            // IMPORTANT! Make sure to validate uploaded file contents, size, etc. to prevent scripts being uploaded into your web app directory
            string savedFileName = Path.Combine(@"D:\Temp\", Guid.NewGuid().ToString() + ".jpg");
            f.SaveAs(savedFileName);
        }
    

    【讨论】:

    • 仍然多次上传同一个文件(第一个文件)并忽略其他文件
    • 没有 file.PostedFiles 的属性。有 file.PostedFile 但它不返回任何集合。它返回单个文件相关信息。所以它在foreach中给出错误“foreach语句不能对变量file.PostedFile ...”进行操作
    • 有一个属性 PostedFiles 老兄。
    • 有一个名为“file”的文件上传控件,它没有任何属性“PostedFiles”。我仔细检查了:(
    • 我在发布之前测试了代码,它工作正常。您使用的是哪个版本的 ASP.NET?
    猜你喜欢
    • 2011-10-12
    • 2016-08-10
    • 1970-01-01
    • 2020-08-24
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多