本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
idea 正则表达式搜索替换应用详解
ggliuwei · 319浏览 · 发布于2021-06-10 +关注

上传视频到oss,之前是走后端上传到oss,会有一个问题就是我要先上传给后端,后端再上传给oss就会导致上传多次,消耗时间过长影响用户体验,所以我参考文档写了直接上传到阿里云oss获取到文件访问路径。

代码实现

以下是我写的一个上传oss的类,只需要替换ossAccessKeyId, ossAccessKeySecret, bucket, url, expiration这几个参数就可以直接实现上传

这篇文章主要介绍了idea 正则表达式搜索替换应用详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

idea 正则表达式搜索替换简单应用 利用正则表达式,idea可以进行快速大量替换

 1.CTRL+R 快捷键调出下面当前页面替代操作栏

在这里插入图片描述

注意要使用正则表达式替换需要勾选regex

2.利用正则表达式进行替换

下面展示一些 简单操作的例子。

123456789101112131415161718192021222324(\w+)get\(0\).getValue\("(\w+)"\) dtCfwStget(0).getValue("CFW_CD")    $1.getValue(0,"$2") dtCfwSt.getValue(0,"CFW_CD")    (\w+).getItem\("(\w+)"\).toString\(\).ToBscNumber\(\)drItem.getItem("PERS_NUMBE").toString().ToBscNumber()    $1.getItemBscNumber("$2")drItem.getItemBscNumber("PERS_NUMBE")    : (\w+).Rows\)for (DataRow drItem : dtCardInfo.Rows)    : $1.Rows())for (DataRow drItem : dtCardInfo.Rows())    row.getItem\("(\w+)"\).toString\(\).ToDecimal\(\)row.getItem("ACT_MTH_VAL").toString().ToDecimal()    row.getItemBigDecimal(  "$1")row.getItemBigDecimal(  "ACT_MTH_VAL")    \[0\]\["(\w+)"\]matAssResRows[0]["ASS_VAL"]    .get(0).getItem("$1")matAssResRows.get(0).getItem("ASS_VAL")

以第二个为例(regester很好用)

在这里插入图片描述

若果想把类似于

123drItem.getItem("PERS_NUMBE").toString().ToBscNumber()drItaaa.getItem("PERS_bbb").toString().ToBscNumber()drItemcccc.getItem("PERS_NUMBEccccc").toString().ToBscNumber()

一件替换为

123drItem.getItemBscNumber("PERS_NUMBE")drItaaa.getItemBscNumber("PERS_bbb")drItemcccc.getItemBscNumber(PERS_NUMBEccccc")

第一步 选取一条原代码,将所有的左括号,右括号,左中括号,右中括号前面叫上\ ,使其变为正确的正则表达式:

123// drItem.getItem("PERS_NUMBE").toString().ToBscNumber();// drItem.getItem\("PERS_NUMBE"\).toString\(\).ToBscNumber\(\);具体还有哪些符号前面需要加\转义,可以网查

第二部 选择需要变为X 的变量,用()选取,\w+指定选取括号里的字符

在这里插入图片描述

根据需求选择,这里通用的为(/w+)代替 X

123// X.getItem("X").toString().ToBscNumber();// (/w+).getItem\("(\w+)"\).toString\(\).ToBscNumber\(\);

这里匹配阶段结束(/w+).getItem("(\w+)").toString().ToBscNumber()可以匹配到所有 X.getItem(“X”).toString().ToBscNumber()的代码

第三步替代 将你需要替代成的X表达式用$1,$2…替代

123456789101112这是我最终需要代码的一种//drItem.getItemBscNumber("PERS_NUMBE")化为X表达式// X.getItemBscNumber("X")利用$加序号指定需要替代的位置这是之前匹配阶段的X表达式,$1选中第一个(\w+),,$2选中第一个(\w+)...... X.getItem("X").toString().ToBscNumber();将 X.getItemBscNumber("X")替代为$1.getItemBscNumber("$2")

最后输入替代

在这里插入图片描述

这里报红是因为我替代过了

到此这篇关于idea 正则表达式搜索替换简单应用的文章就介绍到这了


 

调用上传的例子

其他参事自己根据自己情况上传

1

2

3

4

Future<String> uploadFile(File file, { Function onSendProgress, Function callback}) async {

  final String url = await UploadOss.upload(file: file, onSendProgress: onSendProgress, callback: callback);

  return url;

}

 

另一种方法

目前阿里没有针对Flutter有官方SDK可集成, 但是有人对Flutter的上传有封装库https://pub.dev/packages/aly_oss#-example-tab-, 所以我们只能通过post提交PostObject的形式来上传;

 

准备工作:

1、获取OSS凭证地址(your oss_sts_server), 通知get直接获取static String ossServerUrl = 'http://.../sts-server/sts.php';

2、上传的存储地址(桶名):static String ossEndPointCdn = '<your endpointcdn>';

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

// 通过ossServerUrl直接get获取到如下数据

{

        "StatusCode": 200,

          "AccessKeyId": "STS.NSsrKZes4cqm.....",

          "AccessKeySecret": "7eGnLZaEFsRCGYJAnrtdE9n.....",

          "Expiration": "2020-04-08T03:44:21Z",

          "SecurityToken": "CAISlQJ1q6Ft5B2y....."

  }

  

//表单需要的参数: AccessKeyId、AccessKeySecret、SecurityToken;

FormData formdata = new FormData.from({

        //文件名,随意

        'Filename': OssUtil.instance.getImageName(filePath),

        //"可以填写文件夹名(对应于oss服务中的文件夹)/" + fileName

        'key': uploadName,//上传后的文件名

        'policy': OssUtil.policy,

        //Bucket 拥有者的AccessKeyId。

        'OSSAccessKeyId': data['AccessKeyId'],

        //让服务端返回200,不然,默认会返回204

        'success_action_status': '200',

        'signature': OssUtil.instance.getSignature(data['AccessKeySecret']),

        //临时用户授权时必须,需要携带后台返回的security-token

        'x-oss-security-token': data['SecurityToken'],

        'file': new UploadFileInfo(

            file, OssUtil.instance.getImageNameByPath(filePath))

        //必须放在参数最后

   });

//然后通过存储地址直接把表单(formdata)上传上去;

Dio dio=Dio();

dio.options.responseType=ResponseType.plain;

Response response=awaitdio.post(<ossEndPointCdn>,data:formData);

......

tips: 上传成功后图片地址 imageUrl = ossEndPointCdn + '/' + uploadName;

 

给一个工具类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

import 'dart:convert';

import 'package:crypto/crypto.dart';

import 'dart:math';

  

class OssUtil {

 获取

  //验证文本域

  static String _policyText =

      '{"expiration": "2069-05-22T03:15:00.000Z","conditions": [["content-length-range", 0, 1048576000]]}';//UTC时间+8=北京时间

  

  //进行utf8编码

  // ignore: non_constant_identifier_names

  static List<int> _policyText_utf8 = utf8.encode(_policyText);

  //进行base64编码

  static String policy= base64.encode(_policyText_utf8);

  

  //再次进行utf8编码

  // ignore: non_constant_identifier_names

  static List<int> _policy_utf8 = utf8.encode(policy);

  

  // 工厂模式

  factory OssUtil() => _getInstance();

  

  static OssUtil get instance => _getInstance();

  static OssUtil _instance;

  

  OssUtil._internal();

  

  static OssUtil _getInstance() {

    if (_instance == null) {

      _instance = new OssUtil._internal();

    }

    return _instance;

  }

  

  /*

  *获取signature签名参数

  */

  String getSignature(String _accessKeySecret){

    //进行utf8 编码

    // ignore: non_constant_identifier_names

    List<int> AccessKeySecretUtf8 = utf8.encode(_accessKeySecret);

    //通过hmac,使用sha1进行加密

    List<int> signaturePre = new Hmac(sha1, AccessKeySecretUtf8).convert(_policy_utf8).bytes;

    //最后一步,将上述所得进行base64 编码

    String signature = base64.encode(signaturePre);

    return signature;

  }

  

  // ignore: slash_for_doc_comments

  /**

   * 生成上传上传图片的名称 ,获得的格式:photo/20171027175940_oCiobK

   * 可以定义上传的路径uploadPath(Oss中保存文件夹的名称)

   * @param uploadPath 上传的路径 如:/photo

   * @return photo/20171027175940_oCiobK

   */

  String getImageUploadName(String uploadPath,String filePath) {

    String imageMame = "";

    var timestamp = new DateTime.now().millisecondsSinceEpoch;

    imageMame =timestamp.toString()+"_"+getRandom(6);

    if(uploadPath!=null&&uploadPath.isNotEmpty){

      imageMame=uploadPath+"/"+imageMame;

    }

    String imageType=filePath?.substring(filePath?.lastIndexOf("."),filePath?.length);

    return imageMame+imageType;

  }

  

  String getImageName(String filePath) {

    String imageMame = "";

    var timestamp = new DateTime.now().millisecondsSinceEpoch;

    imageMame =timestamp.toString()+"_"+getRandom(6);

    String imageType=filePath?.substring(filePath?.lastIndexOf("."),filePath?.length);

    return imageMame+imageType;

  }

  

  /*

  * 生成固定长度的随机字符串

  * */

  String getRandom(int num) {

    String alphabet = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM';

    String left = '';

    for (var i = 0; i < num; i++) {

//    right = right + (min + (Random().nextInt(max - min))).toString();

      left = left + alphabet[Random().nextInt(alphabet.length)];

    }

    return left;

  }

  

  /*

  * 根据图片本地路径获取图片名称

  * */

  String getImageNameByPath(String filePath) {

    // ignore: null_aware_before_operator

    return filePath?.substring(filePath?.lastIndexOf("/")+1,filePath?.length);

  }

}


相关推荐

RN开发环境的npm私库本地debug调试

manongba · 688浏览 · 2019-05-09 17:03:46
你不知道的浏览器渲染原理

追忆似水年华 · 1362浏览 · 2019-05-09 22:47:56
基于iview的router常用控制方式

追忆似水年华 · 980浏览 · 2019-06-03 10:39:21
编程小知识之 JavaScript 文件读取

manongba · 708浏览 · 2019-06-10 09:16:16
10个省时间的 PyCharm 技巧 赶快收藏!

· 691浏览 · 2019-06-10 09:32:01
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页