从base64检查文件类型

本文关键字:类型 文件 检查 base64 | 更新日期: 2023-09-27 18:06:44

我有一个WCF REST服务,具有以下OperationContract,用于在磁盘上保存文件:

[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字符串(=fileContent在操作合同中收到)

我想在将文件保存到磁盘之前检查文件类型。我知道从代码审查堆栈交换上的base64字符串检查MIME类型,但我不确定这是否是最好的方法。此外,我已经测试了上传几个。txt文件,每个文件有不同的前5个字符。

我正在寻找一个代码片段,将包括检查几个常见的文件类型。

从base64检查文件类型

点击这里查看链接:

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;
 }
}

注意:如果您使用web浏览器上传过程,字符串可能在开始时具有data:image/png;base64,。首先应该去掉这个。对于web上传,字符串的这一部分是不可信的,因为库会根据扩展名添加它,而不是根据实际的文件类型。例如,一个名为accounts.xlsx.pdf的excel文件将被标记为PDF,而不是xlsx。查看上面所示的内容是评估文件的更可靠的方法。

试图通过检查文件内容来找出文件类型总是容易出错-你不知道所有可能的文件类型,文件头更改等…

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

或者用windows的方式——通过文件扩展名