仅上传文档文件

Posted

技术标签:

【中文标题】仅上传文档文件【英文标题】:upload only document files 【发布时间】:2013-11-26 11:06:33 【问题描述】:

我正在尝试上传文件。用户可以上传 ri 文件,但他/她可以上传图片而不是文件,我想限制这个如何应用条件这是我的上传代码

            if (FileUploadControl.PostedFile != null && 
             FileUploadControl.PostedFile.ContentLength 
            > 0)
        
            if
                (FileUploadControl.FileContent.Length < 100000)
            
                string filename = 
                Path.GetFileName(FileUploadControl.PostedFile.FileName);
                string folder = Server.MapPath("~/Docfiles/");
                Directory.CreateDirectory(folder);
                FileUploadControl.PostedFile.SaveAs(Path.Combine(folder, filename));
                try
                
                    cc.upload1(Txt_docde.Value, txt_dname.Value, 
              FileUploadControl.FileName, Convert.ToInt32(Docdrop.SelectedValue),
                       Convert.ToInt32(DropDownList2.SelectedValue), 
              Convert.ToString(Session["Login2"]),Convert.ToInt32(Session["UserID"]));
                    StatusLabel.ForeColor = System.Drawing.Color.Green;
                    //StatusLabel.ForeColor = System.Drawing.FontStyle.Bold;
                    StatusLabel.Text = "Success";
                
                catch
                
                    StatusLabel.ForeColor = System.Drawing.Color.Red;
                    Label2.Text = "Failed";


                
            
                else
            
                 StatusLabel.ForeColor = System.Drawing.Color.Red;
                            Label2.Text = "File Size to big";
            
        

【问题讨论】:

【参考方案1】:

制作您希望允许的扩展名的通用列表,然后检查您尝试上传的文件是否满足该扩展名要求。

var allowedExtensions = new string[]  "doc", "docx", "pdf" ;
var extension = Path.GetExtension(FileUploadControl.PostedFile.FileName).ToLower().Replace(".", "");

if (allowedExtensions.Contains(extension))

    // Good to go

这是给你的完整代码

if (FileUploadControl.PostedFile != null && FileUploadControl.PostedFile.ContentLength > 0)

    var allowedExtensions = new string[]  "doc", "docx", "pdf" ;
    var extension = Path.GetExtension(FileUploadControl.PostedFile.FileName).ToLower().Replace(".", "");

    if (FileUploadControl.FileContent.Length < 100000 && allowedExtensions.Contains(extension))
    
        string filename = 
        Path.GetFileName(FileUploadControl.PostedFile.FileName);
        string folder = Server.MapPath("~/Docfiles/");
        Directory.CreateDirectory(folder);
        FileUploadControl.PostedFile.SaveAs(Path.Combine(folder, filename));

        try
        
            cc.upload1(Txt_docde.Value, txt_dname.Value, FileUploadControl.FileName, Convert.ToInt32(Docdrop.SelectedValue), Convert.ToInt32(DropDownList2.SelectedValue),  Convert.ToString(Session["Login2"]),Convert.ToInt32(Session["UserID"]));
            StatusLabel.ForeColor = System.Drawing.Color.Green;
            StatusLabel.Text = "Success";
        
        catch
        
            StatusLabel.ForeColor = System.Drawing.Color.Red;
            Label2.Text = "Failed";
        
    
    else
    
         StatusLabel.ForeColor = System.Drawing.Color.Red;
         Label2.Text = "File Size to big";
    

【讨论】:

我在此代码上方或其他地方添加此内容...if (FileUploadControl.PostedFile != null && FileUploadControl.PostedFile.ContentLength > 0) 您可以在检查大小FileUploadControl.FileContent.Length &lt; 100000 后添加它。您几乎可以在 CreateDirectorySaveAs 函数之前的任何位置添加此代码,因为当您保存文件时检查文件没有意义,对吧? :) ok 现在在这里 ..if (allowedExtensions.Contains(extension)) // Good to go 我写什么代码? 在这里你要实际保存文件。【参考方案2】:

尝试这样的方法来验证您感兴趣的文件类型后缀:

if (string.Equals(fileExt, ".pdf", StringComparison.OrdinalIgnoreCase)) ...

【讨论】:

有人可以轻松上传 document.exe.pdf(其中一些用户没有显示文件扩展名,任何黑客都可以更改图标以使其看起来像一个单词或 pdf 文件)并发送一个虚假的 MIME 类型(根据其他答案,您的服务器上有一个恶意文档。所以我会在上面进行更改以确保没有今天所有可执行文件的列表 .exe msi zip rar shs【参考方案3】:

您需要检查发布文件的扩展名或其 MIME 类型,以检测其格式是否正确。

去获取 MIME 类型,检查 ContentType 属性。

ASP.NET How to get MIME Type

【讨论】:

安全方面,mime 类型在技术上是可以伪造的。但这是正确的答案,检查文件扩展名也是明智之举,如下所示。【参考方案4】:

如果要查找特定文件类型,可以使用 Path.GetExtension 方法。

string fileExtension = Path.GetExtension(filename);

    if (fileExtension == ".doc") //or whatever file type your looking for
      
        try
          do your work 
      

【讨论】:

以上是关于仅上传文档文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Dropzone.js 进行分块文件上传(仅限 PHP)?

如何把PDF文档上传到网上

如何将文件上传到 sharepoint 中的文档库?

允许在 WKWebView 上的输入文件中上传文档

通过 FTP 将文件上传到 Sharepoint 文档库

无法将大文件上传到 Google 文档