从base64检查文​​件类型?

ral*_*rer 4 c# wcf base64 file-upload

我有一个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 File API => binary data => base-64编码的ASCII字符串(=在操作合同中收到fileContent)

我想在将文件保存到磁盘之前检查文件类型.我知道以下解决方案:https: //codereview.stackexchange.com/questions/29301/checking-mime-type-from-a-base64-string 但我不确定它是否是最好的方法.此外,我已经测试了上传几个txt文件,每个文件都有不同的前5个字符.

所以我正在寻找一个代码片段,其中包括检查几种常见的文件类型.

谢谢你的任何想法

Oll*_*ith 8

点击此链接:

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;
 }
}
Run Code Online (Sandbox Code Playgroud)

  • 链接不再有效。 (3认同)

小智 0

尝试通过检查文件内容来确定文件类型总是容易出错 - 您不知道所有可能的文件类型、文件头更改等......

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

或者按照 Windows 的方式进行操作 - 通过文件扩展名。