JAVA断点续传简单实现-改进3

改进:
1.取消任务可以将任务下载的详细情况保存下来
2.可以根据保存的下载详细信息重新下载任务

http方式适合高并发,短连接的方式,对于长连接,下载大型文件并不适合。


接下来尝试使用nio来实现断点续的功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java断点续传需要前后端交互实现,以下是一个简单的示例代码: 前端代码(使用jQuery): ```javascript $(function() { var fileInput = $('#fileInput'); var fileSize = fileInput[0].files[0].size; var startByte = 0; $('#uploadButton').click(function() { var formData = new FormData(); formData.append('file', fileInput[0].files[0]); formData.append('startByte', startByte); $.ajax({ url: '/upload', type: 'POST', data: formData, processData: false, contentType: false, xhr: function() { var xhr = $.ajaxSettings.xhr(); xhr.upload.onprogress = function(e) { if (e.lengthComputable) { var percent = Math.round((e.loaded + startByte) / fileSize * 100); $('#progressBar').css('width', percent + '%'); } }; return xhr; }, success: function(response) { if (response.status === 'success') { startByte = response.startByte; if (startByte === fileSize) { alert('上传完成'); } } else { alert('上传失败'); } }, error: function() { alert('上传失败'); } }); }); }); ``` 后端代码(使用Spring Boot): ```java @RestController public class UploadController { private static final String UPLOAD_DIR = "/path/to/upload/dir"; private static final int BUFFER_SIZE = 1024 * 1024; @PostMapping("/upload") public Map<String, Object> upload(@RequestParam("file") MultipartFile file, @RequestParam("startByte") long startByte) throws IOException { File uploadDir = new File(UPLOAD_DIR); if (!uploadDir.exists()) { uploadDir.mkdirs(); } File uploadFile = new File(uploadDir, file.getOriginalFilename()); RandomAccessFile raf = new RandomAccessFile(uploadFile, "rw"); raf.seek(startByte); InputStream in = file.getInputStream(); byte[] buffer = new byte[BUFFER_SIZE]; int len = 0; long totalBytesRead = startByte; while ((len = in.read(buffer)) != -1) { raf.write(buffer, 0, len); totalBytesRead += len; } raf.close(); in.close(); Map<String, Object> response = new HashMap<>(); response.put("status", "success"); response.put("startByte", totalBytesRead); return response; } } ``` 以上代码仅供参考,实际使用时需要根据具体需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值