评论

收藏

[C++] 接口批量上传文件的实例

编程语言 编程语言 发布于:2021-12-13 10:31 | 阅读数:558 | 评论:0

文末附上了多线程爬虫的实现文章。


本人在做接口测试中,遇到一个活儿,将一批图片上传到服务器,12000+,在一个文件夹中不同的文件夹里面,由于上传文件过多,只能写脚本批量上传。也算是自动化的一部分吧,经过测试和改良,终于完成,期间由于种种原因失败60+次,做了第二次上传,分享代码,供大家参考。
思路是先把文件的绝对地址拿出来,第一想核对一下文件数量,第二为了确定文件上传顺序,方便断点续传。
下面是获取文件路径的方法:
List<String> list = new ArrayList<>(); 2    int aaa = 0; 3    File file = new File("/Users/Vicky/Desktop/aaa"); 4    output(file.getAbsolutePath()); 5    File[] files = file.listFiles(); 6    int length = files.length; 7    for (int i = 0; i < length; i++) {8      if (files[i].isDirectory()) {9        File[] file1 = files[i].listFiles();10        output(file1.length);11        output(file1[0].getAbsolutePath());12        for (int j = 0; j < file1.length; j++) {13          String name = file1[j].getAbsolutePath();14//          output(name);15          if (!name.contains("DS_Store")) {16            list.add(name);17            aaa++;18          }19        }20//      aaa++;21      }22//    output(files.length);23    }24    output(aaa, list.size());25    Concurrent.saveRequestTimes(list);
下面是保存路径文件的方法:
/** 2   * 获取文件夹下所有文件的绝对路径的方法 3   * 4   * @param path 5   * @return 6   */ 7  public static List<String> getAllFile(String path) { 8    List<String> list = new ArrayList<>(); 9    File file = new File(path);10    File[] files = file.listFiles();11    int length = files.length;12    for (int i = 0; i < length; i++) {13      File file1 = files[i];14      if (file1.isDirectory()) {15        List<String> allFile = getAllFile(file1.getAbsolutePath());16        list.addAll(allFile);17        continue;18      }19      String path1 = file1.getAbsolutePath();20      if (path1.contains("/.")) continue;21      list.add(path1);22    }23    return list;   }
下面是执行请求的方法:
Admin admin = new Admin(); 2    List<String> list = readTxtFileByLine("/Users/Vicky/Documents/workspace/fission/log/test.log"); 3    List<Integer> list1 = new ArrayList<>(); 4    int size = list.size(); 5    output(size); 6    try { 7      for (int i = 0; i < size; i++) {8        String pic = list.get(i);9        admin.update(pic);10        list1.add(i);11        output(i + pic);12      }13    } catch (Exception e) {14      output("", e);15//    } finally {16//      logLog(list1.toString());17    }18//    admin.update();19    testOver();
其中updata方法就不写了,只是一个普通的上传文件的post请求而已。
其中读取文件并返回list集合的方法如下:
/** 2   * 分行读取txt文档,默认使用utf-8编码格式 3   * 4   * @param filePath 文件路径 5   * @return 返回list数组 6   */ 7  public static List<String> readTxtFileByLine(String filePath) { 8    List<String> lines = new ArrayList<>(); 9    try {10      String encoding = "utf-8";11      File file = new File(filePath);12      if (file.isFile() && file.exists()) { // 判断文件是否存在13        FileInputStream fileInputStream = new FileInputStream(file);14        InputStreamReader read = new InputStreamReader(fileInputStream, encoding);// 考虑到编码格式15        BufferedReader bufferedReader = new BufferedReader(read);16        String line = null;17        while ((line = bufferedReader.readLine()) != null) {18          lines.add(line);19        }20        bufferedReader.close();21        read.close();22        fileInputStream.close();23      } else {24        output("找不到指定的文件");25      }26    } catch (Exception e) {27      output("读取文件内容出错");28      e.printStackTrace();29    }30    return lines;31  }


记录上传失败时的方法在output方法中已经写好了,是记录日志的方法,这里就不写了,在统计失败数据的时候可以用请求响应大小来区分失败和成功,以及失败类型,这都是框架的基本功能,这里先不写了,毕竟内容比较多。


如需多线程实现,可参考:​​多线程爬虫​​







关注下面的标签,发现更多相似文章