【问题标题】:Checking file type from base64?从base64检查文​​件类型?
【发布时间】:2014-07-24 22:57:38
【问题描述】:

我有一个带有以下 OperationContract 的 WCF REST 服务,可将文件保存在磁盘上:

[OperationContract]
[WebInvoke(UriTemplate = "FileSave", Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
ResponseHandler FileSave(string fileName, string fileContent);

文件通过 javascript 发送 - 使用 HTML 文件 API => 二进制数据 => base-64 编码的 ASCII 字符串(=在操作合同中收到文件内容)

我想在将文件保存到磁盘之前检查文件类型。 我在 Code Review Stack Exchange 上知道 Checking MIME Type from a base64 string,但我不确定这是否是最好的方法。另外,我已经测试了上传几个 .txt 文件,每个文件都有不同的前 5 个字符。

我正在寻找包含检查几种常见文件类型的代码 sn-p。

【问题讨论】:

    标签: c# file-upload base64


    【解决方案1】:

    在此处查看此链接:

    https://web.archive.org/web/20170331115315/http://codeanalyse.com/2016/10/02/extracting-file-extension-base64-string/

    这“将包括检查几种常见的文件类型”

    /// <summary>
    /// To demonstrate extraction of file extension from base64 string.
    /// </summary>
    /// <param name="base64String">base64 string.</param>
    /// <returns>Henceforth file extension from string.</returns>
    public static string GetFileExtension(string base64String)
    {
    var data = base64String.Substring(0, 5);
    
    switch (data.ToUpper())
     {
         case "IVBOR":
            return "png";
         case "/9J/4":
             return "jpg";
         case "AAAAF":
             return "mp4";
         case "JVBER":
             return "pdf";
         case "AAABA":
             return "ico";
         case "UMFYI":
             return "rar";
         case "E1XYD":
             return "rtf";
         case "U1PKC":
            return "txt";
         case "MQOWM":
         case "77U/M":
            return "srt";
         default:
            return string.Empty;
     }
    }
    

    【讨论】:

    【解决方案2】:

    试图通过检查文件内容来确定文件类型总是容易出错——你不知道所有可能的文件类型、文件头变化等等......

    只需按照浏览器的方式进行操作 - 通过 mime 类型: 在 javascript 中,通过 HTML 文件 API (evt.dataTransfer.files[0].type) 检查文件类型,然后将其作为 JSON 消息的一部分发送到服务器

    或者像 windows 那样做 - 通过文件扩展名。

    【讨论】:

    • 谢谢。我同意我的解决方案容易出错。我可以有几个 javascript 客户端(不仅是我的消费者应用程序)。因此,我不相信用户发送的 mime 类型或扩展名。
    猜你喜欢
    • 2021-10-13
    • 1970-01-01
    • 2011-08-02
    • 2013-08-26
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2012-01-29
    相关资源
    最近更新 更多