Checking file type from base64?

心不动则不痛 提交于 2020-01-31 16:56:59

问题


I have a WCF REST Service with the following OperationContract that saves files on the disk:

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

Files are sent through javascript - using HTML File API => binary data => base-64 encoded ASCII string (=fileContent is recieved in the operation contract)

I want to check the file type before saving the file on the disk. I am aware of the following solution: https://codereview.stackexchange.com/questions/29301/checking-mime-type-from-a-base64-string but I am not sure if it is the best way to go. Also, I have tested uploading several txt files and each one has different first 5 chars.

So I am looking for a code snippet that would include checking for several common file types.

Thank you for any ideas


回答1:


Check this link here:

http://codeanalyse.com/2016/10/02/extracting-file-extension-base64-string/

This "would include checking for several common file types"

/// <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:


Trying to figure out the file type by checking the file content is always prone to errors - you don't know all possible file types, file headers change etc...

Just do it the either the way browsers do it - by the mime type: In javascript, check the file type via the HTML File API (evt.dataTransfer.files[0].type), then send that as part of your JSON message to the server

Or do it the way windows does it - by the file name extension.



来源:https://stackoverflow.com/questions/24034951/checking-file-type-from-base64

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!