我尝试使用nodejs app,使用超过2mb的ajax上传文件
客户端我使用public function rules() {
return [
['CodeKargah', 'CodeKargah_check'],
// ...
// ...
// ...
];
}
public function CodeKargah_check($attribute) {
$zero = substr($this - > $attribute, 0, 1);
$len = strlen((string)($this - > $attribute));
if ($zero == '0' && $len == 10) {
return null;
}
else {
$this - > addError($attribute, Yii::t('app', 'First number must be zero'));
}
}
api来保存base64,然后通过FileReader
。
我的问题是下面的服务器端代码这么慢,我把FormData
试图找到哪个部分,当上传更大尺寸的文件时,似乎卡在正则表达式console.log
..
任何建议如何改善这个?
https://regex101.com/r/qS2lB2/1
match
答案 0 :(得分:2)
如果您仍然因某些原因仍想使用正则表达式,可以通过将非尾随/^data:[^\/]+\/([^;]+);base64,(.*)$/
子模式替换为涉及更少回溯的适当否定字符类来提高性能。
使用
^
请参阅regex demo。
说明:
data:
- 字符串开头data:
- 文字字符序列[^\/]+
/
- \/
([^;]+)
- 字面斜杠;
- 第1组:除;base64,
;base,
- 文字字符序列(.*)
$
- 第2组:0 +任何字符,但换行符@media only screen and (max-width: 700px){
html.mn-open{
background: none;
}
.mn-navigation-wrap{
width: 50%;
}
}
- 字符串结束。答案 1 :(得分:1)
额外长度意味着正则表达式必须通过更多字符串。
在以data:image/jpeg;base64,/9
开头的字符串上测试您的正则表达式(使用regex101.com,PHP模式):
0 | 63
1 | 68
2 | 73
10 | 113
100 | 563
每个附加角色都是5个步骤。
(基于characters added=100
采取563步骤)
您最大的问题是.+
s
.+?
替换秒,将其从248改为34步灾难性的回溯。 .+
将耗尽整个字符串,如果仍需要查找更多字符,则必须返回,逐个释放字符。 .+?
是懒惰的,这意味着它将尝试在正则表达式中尽快继续前进,尽可能少地使用字符。
答案 2 :(得分:0)
在 try{
String value1 = txt_depID.getText();
String value2 = txt_depName.getText();
String sql = "Update tblDepartment set depID = '"+value1+"' , depName = '"+value2+"' where depID = '"+value1+"'";
String sql1 = "Select depID, depName from tblDepartment";
Class.forName(driver);
conn = DriverManager.getConnection(url);
ps = conn.prepareStatement(sql1);
rs = ps.executeQuery();
ps = conn.prepareStatement(sql);
ps.execute();
if(rs.next()){
String depi = rs.getString("depID"); //Issue: only reading first row
if(depi.equals(value1)){
JOptionPane.showMessageDialog(null, "Entry Saved");
}
else{
JOptionPane.showMessageDialog(null, "Department doesn't exist");
}
}
} catch (Exception e){
JOptionPane.showMessageDialog(null, e);
}
请求中发送base64编码的文件是不必要的。 multipart/form-data
有一个FileReader
方法,可以为您提供原始数据(作为ArrayBuffer),您可以将其直接传递给.readAsArrayBuffer()
。