「All right reserved, any unauthorized reproduction or transfer is prohibitted」
最近工作有个上传和下载的相关的测试,所以就写了一个下载文件(目前都是图片)的方法。Java
不过瘾,顺手也找了一下Groovy
的下载文件方法。
先说结论:Groovy
真香。
Java 下载文件
Java
写起来比较麻烦,主要还是抄了一下其他人的代码,测试完之后感觉也不错。
/**
* 通过url下载图片
*
* @param url
* @param name
*/
public static void down(String url, String name) {
File file = new File(name);
logger.info("下载链接:{},存储文件名:{}", url, file.getAbsolutePath());
if (!file.exists())
try {
file.createNewFile();
} catch (IOException e) {
logger.warn("创建文件失败!", e);
}
try (InputStream is = new URL(url).openStream(); OutputStream os = new FileOutputStream(file)) {
int bytesRead = 0;
byte[] buffer = new byte[1024];
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
logger.warn("下载文件失败!", e);
}
}
Groovy 下载文件
不得不说Groovy
这种语言操作符用的时候太爽了。
/**
* 从url下载文件
* @param url
* @param name
* @return
*/
static def down(String url, String name) {
new File(name) << new URL(url).openStream()
}
处理文件名
因为这个打算做一个图片的爬虫,所以获取到的图片URL
大比例不会是域名 + 路径 + 文件名这样的形式,我搜了几个URL
,发现主要两种不同的类型,一类就是图片后面加了参数,比如URL/a.png?v=3232。还有一类是URL/a.png.webp这类的。
/**
* 处理下载网络图片的时候明文件的问题
* @param name
* @return
*/
static Tuple2 handlePicName(String url) {
url -= ".webp"
String name = url.substring(url.lastIndexOf("/") + 1);
if (name.contains(UNKNOW)) name = name.substring(0, name.indexOf(UNKNOW))
return new Tuple2<String, String>(url, name)
}
这里用了Groovy
元组来存储URL
和name
,除了Tuple2
还有,Tuple3
,Tuple4
,一直到Tuple9
,是不是挺有趣的。
在这个方法里面我先在URL
里面删除了.webp
,因为如果带上这个的话,会导致实际下载的URL
中也会有,使得下载图片质量下降。
改天试一下图片的爬虫效果,敬请期待!
FunTester,腾讯云社区钦定年度作者,非著名测试开发 er,欢迎关注。
TesterHome 为用户提供「保留所有权利,禁止转载」的选项。
除非获得原作者的单独授权,任何第三方不得转载标注了「All right reserved, any unauthorized reproduction or transfer is prohibitted」的内容,否则均视为侵权。
具体请参见TesterHome 知识产权保护协议。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
No Reply at the moment.