如何通过Web API检查接收的文件字节并保存在服务器上?

时间:2017-05-07 06:57:03

标签: c# jquery asp.net-web-api web

我必须使用Web API编写服务。在那种方法中,我应该收到2件物品:

  1. ID
  2. 文件(多个)
  3. 将从移动应用程序调用此方法。在搜索主题后,在示例网页中,我将上传的文件转换为base 64(使用jQuery),然后我在服务器上收到了它:

    <script type="text/javascript">
        // Holds the load event results
        var base64 = "";
    
        //
        function converToBase64() {
            var file = document.querySelector('input[type=file]').files[0];
    
            var reader = new FileReader();
    
            // Event handler
            reader.addEventListener("load", function () {
                base64 = reader.result;
                console.log(base64);
    
            }, false);
    
            // Fires the load event
            if (file) {
                reader.readAsDataURL(file);
    
            }
        }
    
        // AJAX request
        $(function () {
            $('#Button1').click(function () {
    
                var data = {};
    
                data.Id = "3";
                data.File = base64;
                console.log(data);
                alert("start");
                $.ajax({
                    type: "POST",
                    url: "/api/SaveFile",
                    data: JSON.stringify(data),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json"
                }).done(function (result) {
                    console.log(result);
                    });
                })
            });
    
    
    </script>
    
    <div>
        <input type="file" onchange="converToBase64()"><br>
        <input id="Button1" type="button" value="Submit" />
    </div>
    

    我不知道我的解决方案是否正确。无论如何,在服务器端接收后,我将base 64 string转换为byte[]

    [HttpPost]
    public HttpResponseMessage Post(FileUploadData data)
    {
        string converted = data.File.Substring(data.File.IndexOf(",") + 1, data.File.Length - data.File.IndexOf(",") - 1);
        byte[] fileBytes = Convert.FromBase64String(converted);
    
        // Do checking
        return Request.CreateResponse(HttpStatusCode.OK, "Success");
    }
    
    public class FileUploadData
    {
        public string Id { get; set; }
        public string File { get; set; }
    }
    

    我已经阅读了很多关于将字节保存到文件中的相同问题的解决方案。但在检查扩展名和大小之前,我不应该这样做。由于将禁止文件保存在物理空间是危险的,那么在保存到磁盘(作为文件)之前如何进行这些检查呢?因为。

0 个答案:

没有答案