如果文件名带有括号(),则上传的文件不会上传

时间:2018-12-03 07:47:36

标签: javascript c# regex ajax file-upload

我有一个FileUpload控件,可以在其中上传PDF文件,并将它们保存到文件夹中,文件路径也保存到数据库中。

问题是当我上载包含括号()作为文件名一部分的文件时,该文件返回未定义。仅当文件名带有括号()时,才会发生这种情况;如果文件名没有括号(),则可以正常上传。

这是我的代码

var filePaths;
function UploadFile() {

    var fileUpload = document.getElementById("fuPDFupload");
    var regex = new RegExp("([a-zA-Z0-9\s_\\.\-:])+(.jpg|.png|.pdf)$");
    if (regex.test(fileUpload.value.toLowerCase())) {

        //Check whether HTML5 is supported.
        if (typeof (fileUpload.files) != "undefined") {
            //Initiate the FileReader object.
            var reader = new FileReader();
            //Read the contents of Image File.
            reader.readAsDataURL(fileUpload.files[0]);
            reader.onload = function (e) {
                //Initiate the JavaScript Image object.
                var image = new Image();

                //Set the Base64 string return from FileReader as source.
                image.src = e.target.result;


                var fileUpload = $("#fuPDFupload").get(0);
                var files = fileUpload.files;

                var data = new FormData();
                for (var i = 0; i < files.length; i++) {
                    data.append(files[i].name, files[i]);
                }

                $.ajax({
                    url: "FileUploadHandler.ashx",
                    type: "POST",
                    data: data,
                    contentType: false,
                    processData: false,
                    success: function (result) {
                        filePaths = result;
                        //Save to DB
                        UpdateSchedule();
                    },
                    error: function (err) {
                    }
                });
                return true;
            };


        } else {
            alert("This browser does not support HTML5.");
            return false;
        }
    } else {
        return false;
    }

}

FileUploadHandler代码:

public class FileUploadHandler : IHttpHandler {

    public void ProcessRequest(HttpContext context)
        {
            if (context.Request.Files.Count > 0)
            {
                string filePaths = Guid.NewGuid().ToString() + ".pdf";
                HttpPostedFile file = context.Request.Files[0];
                string path = context.Server.MapPath("~/QfrencyInvoices/" + filePaths);
                file.SaveAs(path);

                context.Response.ContentType = "text/plain";
                context.Response.Write(filePaths);
            }
        }

    public bool IsReusable {
        get {
            return false;
        }
    }

}

我相信可能会出现此问题,因为正则表达式不正确,但我无法修复它。 请协助我如何上传带有圆括号()作为文件名一部分的文件。谢谢。

1 个答案:

答案 0 :(得分:1)

只需离开下一个正则表达式spotafter。它检查文件名是否具有扩展名jpg,png或pdf。文本大小写无关紧要,因此将“ i”添加为第二个参数。

您可以在https://regexone.com/上学习正则表达式