当前位置: 首页 > wzjs >正文

网站使用支付接口如何收费网站开发属于购销合同

网站使用支付接口如何收费,网站开发属于购销合同,网站站点地图设计,网页设计html基础代码在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…

在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围:

实现原理

  1. Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes=1024-

  2. 本地文件记录:保存已下载的字节位置

  3. 206 状态码处理:服务器返回部分内容(HTTP 206 Partial Content)

  4. 文件追加写入:从上次中断的位置继续写入文件

完整实现代码(Kotlin/Java)

kotlin

import okhttp3.*
import java.io.File
import java.io.IOException
import java.io.RandomAccessFileclass ResumeDownloader(private val client: OkHttpClient = OkHttpClient()
) {fun download(url: String, file: File, listener: ProgressListener? = null) {// 1. 获取已下载字节数val downloadedBytes = if (file.exists()) file.length() else 0L// 2. 创建带Range头的请求val request = Request.Builder().url(url).header("Range", "bytes=$downloadedBytes-").build()client.newCall(request).enqueue(object : Callback {override fun onFailure(call: Call, e: IOException) {listener?.onError(e)}override fun onResponse(call: Call, response: Response) {if (!response.isSuccessful) {listener?.onError(IOException("Unexpected code: ${response.code}"))return}// 3. 检查服务器是否支持断点续传val isResumeSupported = response.code == 206 // Partial Contentval totalBytes = response.header("Content-Length")?.toLongOrNull() ?: -1Lval finalTotalBytes = if (isResumeSupported) {downloadedBytes + (totalBytes)} else {totalBytes}// 4. 处理响应体response.body?.use { body ->RandomAccessFile(file, "rw").use { output ->// 移动到文件末尾追加output.seek(downloadedBytes)val input = body.byteStream()val buffer = ByteArray(8192)var bytesRead: Intvar progress = downloadedBytes// 5. 写入文件while (input.read(buffer).also { bytesRead = it } != -1) {output.write(buffer, 0, bytesRead)progress += bytesRead// 更新进度listener?.onProgress(progress, finalTotalBytes)}listener?.onComplete(file)}}}})}interface ProgressListener {fun onProgress(currentBytes: Long, totalBytes: Long)fun onComplete(file: File)fun onError(e: Exception)}
}

Java 版本核心代码

java

// 创建带Range头的请求
long downloadedBytes = file.length();
Request request = new Request.Builder().url(url).addHeader("Range", "bytes=" + downloadedBytes + "-").build();// 处理响应
try (Response response = client.newCall(request).execute()) {if (response.code() == 206) { // Partial Contenttry (RandomAccessFile output = new RandomAccessFile(file, "rw");InputStream input = response.body().byteStream()) {output.seek(downloadedBytes);byte[] buffer = new byte[8192];int bytesRead;while ((bytesRead = input.read(buffer)) != -1) {output.write(buffer, 0, bytesRead);}}}
}

关键注意事项

  1. 服务器支持检查

    • 成功时返回 HTTP 206(部分内容)

    • 失败时返回 200(完整文件)或 416(范围请求错误)

    • 响应头需包含 Accept-Ranges: bytes

  2. 文件处理

    • 使用 RandomAccessFile 实现文件随机访问

    • 通过 seek() 定位到文件末尾

    • 避免覆盖已下载内容

  3. 进度跟踪

    • 总大小 = 已下载大小 + Content-Length

    • 实时计算:currentBytes += bytesRead

  4. 异常处理

    • 网络中断时保存当前进度

    • 重新下载时使用最新文件长度

增强功能建议

  1. 进度持久化:使用数据库记录下载状态

  2. 暂停/恢复:暴露下载控制接口

  3. 多线程下载:分割文件范围并行下载(需服务器支持)

  4. 完整性校验:下载完成后验证文件 MD5/SHA1

示例用法:

kotlin

val downloader = ResumeDownloader()
val file = File(context.filesDir, "largefile.zip")downloader.download("https://example.com/largefile.zip", file,object : ResumeDownloader.ProgressListener {override fun onProgress(current: Long, total: Long) {val percent = (current * 100 / total).toInt()updateProgressBar(percent)}override fun onComplete(file: File) {showToast("下载完成")}override fun onError(e: Exception) {showError(e.message)}}
)

通过此实现,OkHttp 可在网络中断后自动从断点恢复下载,大幅提升大文件下载体验。


文章转载自:

http://IYnsmx0m.yqqgp.cn
http://pEApYTr1.yqqgp.cn
http://gdfPHJOo.yqqgp.cn
http://mcpdaauz.yqqgp.cn
http://IG553B4g.yqqgp.cn
http://6gGzUByF.yqqgp.cn
http://kOf330Fl.yqqgp.cn
http://5k7xBeEG.yqqgp.cn
http://Bl3ci7PF.yqqgp.cn
http://h6ZyWhbF.yqqgp.cn
http://CGCvWqD8.yqqgp.cn
http://GsogJSJe.yqqgp.cn
http://WTISs8H1.yqqgp.cn
http://qE66Nmyu.yqqgp.cn
http://bxJ4uZyH.yqqgp.cn
http://7BdRPeVu.yqqgp.cn
http://zUDXv7gR.yqqgp.cn
http://PXkXZV26.yqqgp.cn
http://Vn2dl5d9.yqqgp.cn
http://bC599Fje.yqqgp.cn
http://DUEVNcqT.yqqgp.cn
http://oA4CtwBP.yqqgp.cn
http://AbWz1ZL9.yqqgp.cn
http://UYriPK1R.yqqgp.cn
http://JhN2F7pO.yqqgp.cn
http://NCJla3Fz.yqqgp.cn
http://SSPpIS4X.yqqgp.cn
http://wikYDrVP.yqqgp.cn
http://VhzXYXj5.yqqgp.cn
http://e1PjwLFk.yqqgp.cn
http://www.dtcms.com/wzjs/729540.html

相关文章:

  • 网站开发的层次黄骅网站建设公司
  • 化妆品企业网站源码视觉做的比较好的国外网站
  • ppt 如何做网站交互式如何做网站英文简历模板
  • 网站开发实战作业答案wordpress爱搭配
  • 易县网站建设wordpress最强的教育网站
  • 国外网站网页设计兰州装修公司哪家好
  • 商务网站建设的一般流程是什么?私人信息调查
  • 网站优化推广服务wordpress开发框架
  • 网站改版建设征求意见书佛山市网站公司
  • 国外活动策划网站电子商务网站建设 李洪心
  • 网站备案密码忘wordpress虚化主题
  • 甲蛙网站建设建筑工程网上备案流程
  • 电商网站开发工作室东莞网站设计公司淘宝
  • 商城顺德网站建设pc网站建设建议
  • 秦皇岛建设网站公司哪家好手机可以创建网站吗
  • 前端如何做双语网站网站设计答辩ppt
  • 绍兴手机网站建设东陵网站制作
  • 学校能建设网站吗亚洲足球最新排名
  • 四字母域名建设网站可以吗免费的网页设计成品详解
  • 怎么让自己做的网站让别人看到手机网站范例
  • 做网站的图片字虚外贸公司网站多少钱
  • 天津做流产五洲网站北京网站建设华网天下
  • wordpress国主题公园搜索引擎优化员简历
  • 搭建flv视频网站嘉兴网站开发选哪家
  • 概念网站源码一套网站源码多少钱
  • 设计网站页面特效怎么做网址短链接在线生成免费
  • 哪几个小说网站做网编拿的钱多南昌做网站比较好的公司有哪些
  • 网站建设主要工作沈阳祥云医院看男科怎么样
  • 有什么做调查的网站好小程序申请流程
  • 用phpmysql做网站成都房屋装修设计公司