坚果云上传文件显示文件名包括特殊字符

坚果云上传文件显示文件名包括特殊字符,第1张

在坚果云上传文件时,文件名可以包括特殊字符,比如:空格、括号、星号、加号、减号、下划线、百分号、冒号、句号、逗号、分号、双引号、单引号等。但是,不能包含斜杠(/)、反斜杠(\)、竖线(|)、问号(?)、星号(*)、尖括号(<>)等特殊字符,否则会导致文件上传失败。另外,文件名长度也不能超过255个字符,否则也会导致上传失败。因此,在上传文件时,要注意文件名中不能包含上述特殊字符,并且文件名长度不能超过255个字符,以保证文件上传成功。

(1)不容许用户上传包含特殊字符的文件 在上传文件的时候,加上必要的效验;这个比较简单,改动量小。

另外文件名包含特殊字符的文件,比较少,原因是无法从键盘输入特殊字符!

JS校验方法举例:

方法1:排除法

function containSpecial( str )   

{   

    var containSpecial = RegExp(/[(\ )(\~)(\!)(\@)(\#)(\$)(\%)(\^)(\&)(\*)(\()(\))(\-)(\_)(\+)(\=)(\[)(\])(\{)(\})(\|)(\\)(\)(\:)(\')(\")(\,)(\.)(\/)(\<)(\>)(\?)(\)]+/)   

    return ( containSpecial.test(str) )   

str=fileName,返回True就表示包含特殊字符!      

方法2:定义法

function dosub(){

    var s = document.getElementById("t").value

    var i = /[0-9]+/

    var str = /[A-Za-z]/

    var spec=/[,.<>{}~!@#$%^&*]/

    if(!str.test(s)){

      alert("必须包含字母")

    }

    if(!i.test(s)){

      alert("必须包含数字")

    }

    if(!spec.test(s)){

      alert("必须包含特殊字符。例如:!@#$%^&* 其中一个或多个")

    }

}

方法3:替换法

1.替换所有要替换字符

var str = "$Hello World!$Hello World!$Hello World!"

//把所有的“Hello World!”替换为“Welcome you!”。“/g”是替换全部。

alert(str.replace(/Hello World!/g,"Welcome you!"))

2.替换所有要替换的特殊字符。

var str = "$Hello World!$Hello World!$Hello World!"

//利用正则表达式把所有的“$”替换为“#”。“$”为特殊字符,所以前面要加“\\”。

var regS = new RegExp("\\$","g")

alert(str.replace(regS,"#"))

文件的上传其实也是post方式进行提交的,可以理解为跟表单提交大体一致,但:

1、普通表单采用的是默认MIME编码。默认值为:application/x-www-form-urlencoded(在发送前编码所有字符);

2、文件上传的表单采用的MIME编码方式必须指定为:multipart/form-data(不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。);

3、在HTML表单里通过设置:encType来指定MIME编码;比如:encType="multipart/form-data",在其他客户端采用Content-Type来指定;比如:Content-Type="multipart/form-data"

说明:一个HTTP请求其实发送了2大部分内容,大家常见的就是Request Payload,但是另一个大家不常 *** 作的是Requst Header,简单来说就是:header+body的方式。上面的MIME编码等指定方式就是在header里。当然,HTML那个encType就是Content-Type,只是他换了个名字而已。当然,Content-Type何止这2种。。。太多了, 详见

4、文件上传还需要一个boundary。

说明:这个是用来干嘛的?先说位置,它是放在Content-Type里。例子:Content-Type="multipart/form-databoundary=ed67c97e-2000-47de-9033-77aeb8df43d9"(浏览器每次都会自动生成一个不同的boundary)。我们再来看看这玩意儿是用来干嘛的:它标志着一段数据(当有多个上传内容时)的开始和结束。看完了这句话我估计你跟我一样----毛意思????

a)这一串字符其实就是随机生成的,它是一个分隔符,一定要确保你需要上传的文件中没有完全包含这个分隔符,一般来说,随便一个含几个字符的字符串都是没有问题的。

b)这个分割符到底是用来分割啥的?它用来分割你表单里各个表单元素。比如你的表单里有<input type='text' name='username' value="parcool">

<input type='file' name='filename' value="filedata">

就是用来分割这个的。

当然,Header也不止这点儿东西啊,还有一些其他的, 详见(维基百科的,不知道你能否打开)

这样,你就能愉快的上传咯,在做安卓或iOS的时候,很多框架已有类似于浏览器的功能会自动加上boundary。当然,我这里没有详细示例,也没有最底层的HTTP协议讲解,只是图方便理解而已。

写博文好累的,有空了再写这边的吧,不过意思跟客户端的几乎一致。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11530715.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存