Javascript 如果文件名包含括号(),则上载的文件不会上载
我有一个FileUpload控件,我上传PDF文件并将其保存到文件夹中,文件路径保存到数据库中 问题是,当我上传一个包含括号()的文件作为文件名的一部分时,它返回undefined。只有当文件名有括号()时才会发生这种情况,如果没有括号(),则可以正常上载 这是我的密码Javascript 如果文件名包含括号(),则上载的文件不会上载,javascript,c#,regex,ajax,file-upload,Javascript,C#,Regex,Ajax,File Upload,我有一个FileUpload控件,我上传PDF文件并将其保存到文件夹中,文件路径保存到数据库中 问题是,当我上传一个包含括号()的文件作为文件名的一部分时,它返回undefined。只有当文件名有括号()时才会发生这种情况,如果没有括号(),则可以正常上载 这是我的密码 var filePaths; function UploadFile() { var fileUpload = document.getElementById("fuPDFupload"); var regex
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;
}
}
我相信这个问题可能是因为正则表达式不正确,但我无法修复它。
请帮助我如何上传文件名中包含括号()的文件。谢谢。只需离开下一个regex
新的RegExp(“(\(jpg | png | pdf)$”,“i”);
。它检查文件名是否有扩展名jpg、png或pdf。文本大小写无关紧要,因此添加了“i”作为第二个参数
你可以在上学习正则表达式你是否尝试过修改正则表达式以包含括号?我尝试过,但没有成功。我不确定我是否正确地构造了正则表达式,如下转义:
\(
和\)
,因为圆括号是正则表达式语法(分组)的一部分.但是:你为什么要这样做呢?首先一定有人想出了那个正则表达式,故意限制可以上传的内容。应该有一个要求/规则,否则整个测试就没有意义。或者至少向用户返回一条有意义的消息,只是无缘无故地拒绝会让他们很困惑。防弹文件上传安全检查总是涉及文件字节签名测试,如libmagic,文件名可能被伪造。文件(和文件名)检查/修改必须在服务器端完成,否则可能会出现恶意代码注入。我是否应该按照您的建议更改我的正则表达式?新的正则表达式(\(jpg | png | pdf)$,“I”);这对我来说很好:var regex=new RegExp(“\.+(.jpg |.png |.pdf)$”;
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;
}
}
}