shehuan / dutil Goto Github PK
View Code? Open in Web Editor NEWA file download and upload library,that is based on okhttp
License: Apache License 2.0
A file download and upload library,that is based on okhttp
License: Apache License 2.0
DBuilder 构建出的 DownloadManger 为单例 .
多线程时对DownloadManger进行多次 init 操作,
DownloadManager.downloadData为非安全对象.
是否可使用 DownloadManger.addDonloadTask(DownloadData downloadData) 形式对下载数据的对象进行保存? 亦或者通过 url 进行 map 映射?
同时 context 是否可以使用 context.getApplicationContext 避免Activity 内存泄漏?
@OverRide
public void bindView(BaseViewHolder holder, final SavePhotoEntity obj, final int position) {
Button select = holder.getView(R.id.bt_select);
final TextView state = holder.getView(R.id.tv_state);
final TextView savePath = holder.getView(R.id.tv_name);
Log.e("liluo","地址:"+obj.getUrl());
DUtil.init(mContext)
.url(obj.getUrl())
.path(PhotoSave.getSavePath1(mContext))
.name(UUID.randomUUID().toString() + obj.getUrl().substring(
obj.getUrl().lastIndexOf(".")))
.childTaskCount(1)
.build()
.start(new DownloadCallback() {
@OverRide
public void onStart(long l, long l1, float v) {
state.setText("开始下载");
}
@Override
public void onProgress(long l, long l1, float v) {
state.setText("下载中");
}
放到recyclerView中点击时间串了
DUtil.init(context)
.url(url)
.path(path)
.name(name)
.build()
.start(new DownloadCallback() {
... ...
});
实际情况不可能把服务器上的文件目录全部映射到服务器,所以我在tomcat服务器上映射一个下载文件的servlet ,用流读取文件,然后用response的输出给客户端。这种方式浏览器,下载工具都能正常下载。但是使用Dutil下载到快结束时总是出错,下载不成功。
我服务端是这样写的:
File tagetFile = new File(filePath);
if (tagetFile.exists()) {
try {
resp.reset();
resp.setContentType("application/x-download");
resp.setHeader("Last-Modified",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tagetFile.lastModified()));
resp.setCharacterEncoding("utf-8");
resp.setHeader("Content-Disposition", "attachment; filename=" + fileName + "");
resp.setHeader("Content-Length", tagetFile.length() + "");
/* 如果文件长度大于0 /
if (tagetFile.length() != 0) {
/ 创建输入流 /
InputStream inStream = new FileInputStream(tagetFile);
byte[] buf = new byte[4096];
/ 创建输出流 */
ServletOutputStream servletOS = resp.getOutputStream();
int readLength;
while (((readLength = inStream.read(buf)) != -1)) {
servletOS.write(buf, 0, readLength);
}
inStream.close();
servletOS.flush();
servletOS.close();
}
} catch (Exception e) {
System.out.println("FileDownLoad 错误");
}
}
有几个问题想请教下:
if (downloadManager == null) {
synchronized (DownloadManger.class) {
if (downloadManager == null) {
downloadManager = new DownloadManger(context);
}
}
}
return downloadManager;
}
-}
dutil模块里的package com.othershe.dutil.Utils包名大写了,虽然可以找到,但是AS还是会划条难看的红线。可以改一下 ,我说的是AndroidStudio工程dutil模块里的包名,真实文件目录里的包名是正确的(小写的)。
比如,我要下载音乐,要封面,歌手,时间等等
楼主代码质量不错,但是为什么FileTask都用的同步请求,是不是异步请求通信太复杂?
下载中,突然断网了该如何处理?
现在的情况是,下载中突然断网了,整个下载就卡在那里了,无法继续下载
请问是否支持ftp文件下载,我在使用的时候报错
java.lang.IllegalArgumentException: unexpected url: ftp://10.19.67.79:21/切片/nb20170824.vtpk
看了下你的源码,写的不错哦,逻辑清晰,易于使用。而且没有用到RxJava和Retrofit这二货,
下次建议把JsonCallback也给加上,
楼主的代码整体思路很清晰,关键地方也给出了注释,但是有个问题想请楼主解答下:
saveRangeFile() 中,采用多个request来分段请求response,tempChildTaskCount的含义和后面的这个while循环能给出更详细的解答吗?
......
while (tempChildTaskCount < childTaskCount) {
//由于每个文件采用多个异步操作进行,发起多个异步操作后该线程已经结束,但对应文件并未下载完成,
//则会出现线程池中同时下载的文件数量超过设定的核心线程数,所以考虑只有当前线程的所有异步任务结束后,
//才能使结束当前线程。
}
}
下载时 总会有一两个文件 的临时文件未转过来 下载就完了 temp文件大小为48b
请问如何优化recyclerView的复用问题?防止滑动之后,进度不显示?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.