接口批量上传文件的实例

2018年07月30日更新:主要更新了获取文件路径的方法,改为递归完成,去除隐藏文件。

/**
	 * 获取文件夹下所有文件的绝对路径的方法
	 *
	 * @param path
	 * @return
	 */
	public static List<String> getAllFile(String path) {
		List<String> list = new ArrayList<>();
		File file = new File(path);
		File[] files = file.listFiles();
		int length = files.length;
		for (int i = 0; i < length; i++) {
			File file1 = files[i];
			if (file1.isDirectory()) {
				List<String> allFile = getAllFile(file1.getAbsolutePath());
				list.addAll(allFile);
				continue;
			}
			String path1 = file1.getAbsolutePath();
			if (path1.contains("/.")) continue;
			list.add(path1);
		}
		return list;
	}

----------------------------------分割线----------------------------------

本人在做接口测试中,遇到一个活儿,将一批图片上传到服务器,12000+,在一个文件夹中不同的文件夹里面,由于上传文件过多,只能写脚本批量上传。也算是自动化的一部分吧,经过测试和改良,终于完成,期间由于种种原因失败60+次,做了第二次上传,分享代码,供大家参考。

思路是先把文件的绝对地址拿出来,第一想核对一下文件数量,第二为了确定文件上传顺序,方便断点续传。

下面是获取文件路径的方法:

List<String> list = new ArrayList<>();
		int aaa = 0;
		File file = new File("/Users/Vicky/Desktop/aaa");
		output(file.getAbsolutePath());
		File[] files = file.listFiles();
		int length = files.length;
		for (int i = 0; i < length; i++) {
			if (files[i].isDirectory()) {
				File[] file1 = files[i].listFiles();
				output(file1.length);
				output(file1[0].getAbsolutePath());
				for (int j = 0; j < file1.length; j++) {
					String name = file1[j].getAbsolutePath();
//					output(name);
					if (!name.contains("DS_Store")) {
						list.add(name);
						aaa++;
					}
				}
//			aaa++;
			}
//		output(files.length);
		}
		output(aaa, list.size());
		Concurrent.saveRequestTimes(list);

 

下面是保存路径文件的方法:

 

public static void saveRequestTimes(List<String> data) {
		StringBuffer buffer = new StringBuffer();
		int length = data.size();
		for (int i = 0; i < length; i++) {
			if (i == 0) {
				buffer.append(data.get(0));
				continue;
			}
			buffer.append(LINE + data.get(i));
		}
		logLong(buffer.toString());
	}

下面是执行请求的方法:

Admin admin = new Admin();
		List<String> list = readTxtFileByLine("/Users/Vicky/Documents/workspace/fission/log/test.log");
		List<Integer> list1 = new ArrayList<>();
		int size = list.size();
		output(size);
		try {
			for (int i = 0; i < size; i++) {
				String pic = list.get(i);
				admin.update(pic);
				list1.add(i);
				output(i + pic);
			}
		} catch (Exception e) {
			output("", e);
//		} finally {
//			logLog(list1.toString());
		}
//		admin.update();
		testOver();

其中updata方法就不写了,只是一个普通的上传文件的post请求而已。

其中读取文件并返回list集合的方法如下:

/**
	 * 分行读取txt文档,默认使用utf-8编码格式
	 *
	 * @param filePath 文件路径
	 * @return 返回list数组
	 */
	public static List<String> readTxtFileByLine(String filePath) {
		List<String> lines = new ArrayList<>();
		try {
			String encoding = "utf-8";
			File file = new File(filePath);
			if (file.isFile() && file.exists()) { // 判断文件是否存在
				FileInputStream fileInputStream = new FileInputStream(file);
				InputStreamReader read = new InputStreamReader(fileInputStream, encoding);// 考虑到编码格式
				BufferedReader bufferedReader = new BufferedReader(read);
				String line = null;
				while ((line = bufferedReader.readLine()) != null) {
					lines.add(line);
				}
				bufferedReader.close();
				read.close();
				fileInputStream.close();
			} else {
				output("找不到指定的文件");
			}
		} catch (Exception e) {
			output("读取文件内容出错");
			e.printStackTrace();
		}
		return lines;
	}

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

宣传一下自己的QQ群:群号:340964272

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页