我有一个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 =>二进制数据=> base-64编码的ASCII字符串(=在操作合同中收到fileContent)
我想在将文件保存到磁盘上之前检查文件类型。 我知道以下解决方案: https://codereview.stackexchange.com/questions/29301/checking-mime-type-from-a-base64-string 但我不确定这是否是最佳方式。此外,我已经测试了上传几个txt文件,每个文件都有不同的前5个字符。
所以我正在寻找一个代码片段,其中包括检查几种常见的文件类型。
感谢您提出任何想法
答案 0 :(得分:6)
点击此链接:
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;
}
}
答案 1 :(得分:0)
通过检查文件内容来试图找出文件类型总是容易出错 - 你不知道所有可能的文件类型,文件头改变等......
按照浏览器的方式执行操作 - 通过mime类型: 在javascript中,通过HTML文件API(evt.dataTransfer.files [0] .type)检查文件类型,然后将其作为JSON消息的一部分发送到服务器
或者按照Windows的方式进行操作 - 通过文件扩展名。