java mvc上传文件进度_Spring MVC 带进度上传文件

spring mvc实现进度上传有两种方式

1. 重写 CustomMultipartResolver 里面的方法,加个监听器。

2.本文记录另一种更简单的办法,利用jquery+html5即可实现读取文件上传进度

spring mvc xml

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

controller

@RequestMapping("/upload")

public @ResponseBody Object uploadFile(HttpServletRequest request,@RequestParam(value = "file")

MultipartFile... files)

throws

InterruptedException {

try {

for (MultipartFile f : files) {

if (f.getSize() > 0) {

File targetFile = new File("F:/a.doc");

f.transferTo(targetFile);//写入目标文件

}

}

return "ok";

} catch (Exception e) {

System.out.println("error!");

}

return null;

}

jsp

String path = request.getContextPath();

String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";

%>

文件上存

$(function () {

$("#upload_file").on('click', function () {

var data = new FormData();

data.append('file', $("#file")[0].files[0]);

//new FormData($('#uploadForm')[0])

$.ajax({

data: data,

url: "upload",

type: 'post',

contentType: false,

processData: false,

xhr: function () { //这是关键 获取原生的xhr对象 做以前做的所有事情

var xhr = jQuery.ajaxSettings.xhr();

xhr.upload.onload = function () {

alert('finish downloading')

}

xhr.upload.onprogress = function (evt) {

if (evt.lengthComputable) {

var progressBar = document.getElementById("progressBar");

var percentageDiv = document.getElementById("percentage");

if (evt.lengthComputable) {

var percent = evt.loaded / evt.total * 100;

console.log(percent,evt);

progressBar.max = evt.total;

progressBar.value = evt.loaded;

$(percentageDiv).html(Math.round(percent) + "%");

}

}

}

return xhr;

},

success: function () {

alert("ok");

},

error: function () {

}

});

});

});

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Java 分片文件可以通过将文件分成若干个小块,每个小块进行输的方式实现。具体步骤如下: 1. 将文件分成若干个小块:使用 RandomAccessFile 类读取文件,将文件按照指定大小分成若干个小块。 2. 上每个小块:使用 HttpURLConnection 类上每个小块,需要设置请求头 Content-Type、Content-Disposition 和 Content-Range。其中,Content-Range 表示当前上的小块在整个文件中的起始位置和结束位置。 3. 合并所有小块:上所有小块后,使用 HttpURLConnection 类发送合并请求,将所有小块合并成一个完整文件。 参考代码如下: ```java // 读取文件,将文件分成若干个小块 RandomAccessFile raf = new RandomAccessFile(file, "r"); long fileLength = raf.length(); long blockSize = fileLength / 10; // 每个小块大小为文件大小的 1/10 for (int i = 0; i < 10; i++) { long startPos = i * blockSize; long endPos = (i + 1) * blockSize - 1; if (i == 9) { endPos = fileLength - 1; } // 上每个小块 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/octet-stream"); conn.setRequestProperty("Content-Disposition", "attachment;filename=" + file.getName()); conn.setRequestProperty("Content-Range", "bytes " + startPos + "-" + endPos + "/" + fileLength); conn.setDoOutput(true); conn.setDoInput(true); OutputStream out = conn.getOutputStream(); raf.seek(startPos); byte[] buffer = new byte[1024]; int len; while ((len = raf.read(buffer)) != -1) { out.write(buffer, 0, len); } out.close(); // 处理响应结果 int code = conn.getResponseCode(); if (code == 200 || code == 206) { // 上成功 } else { // 上失败 } } // 发送合并请求,将所有小块合并成一个完整文件 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/json"); conn.setDoOutput(true); JSONObject json = new JSONObject(); json.put("fileName", file.getName()); json.put("fileSize", fileLength); String data = json.toJSONString(); OutputStream out = conn.getOutputStream(); out.write(data.getBytes()); out.flush(); out.close(); // 处理响应结果 int code = conn.getResponseCode(); if (code == 200) { // 合并成功 } else { // 合并失败 } ``` 需要注意的是,在上每个小块时,需要设置 Content-Range 请求头,表示当前上的小块在整个文件中的起始位置和结束位置。而在合并所有小块时,需要发送一个合并请求,将所有小块合并成一个完整文件。 ### 回答2: Java分片文件是指将文件分成多个小片段进行上的一种方式。这种方式可以提高上效率、降低网络输的压力,尤其对于大文件的上尤为有效。 在Java中实现分片文件的关键是使用多线程进行并发上。首先,需要将待上文件切割成若干个小片段,每个小片段的大小可以根据需求自行确定。然后,创建多个线程,每个线程负责上一个小片段。可以使用Java的线程池来管理这些上线程,控制并发数,提高效率。 上过程中,每个线程需要记录自己上文件片段的位置和大小,并通过HTTP协议向服务器发送相应的请求。服务器接收到请求后,会根据相关信息将文件片段写入指定位置。上完成后,服务器端会通知客户端继续上下一个文件片段,直到所有文件片段都上完成。最后,客户端和服务器可以通过校验文件的MD5等信息来验证文件的完整性。 需要注意的是,在分片文件过程中,可能会出现网络异常、服务器故障等情况,需要具备相应的错误处理机制,确保文件能够完整上。此外,还可以对上过程中的进度进行监控和显示,提升用户体验。 总之,Java分片文件是一种提高上效率和稳定性的方法,通过利用多线程并发上多个小片段,可以充分利用网络宽和服务器资源,提升文件的速度和可靠性。 ### 回答3: Java分片文件是指将大文件分割成若干小块(分片),通过网络逐个上到服务器,并在服务器端将这些分片再合并成原始文件的过程。 要实现Java分片文件,需要以下步骤: 1. 客户端将要上文件进行分片处理。可以根据预设的分片大小,将文件划分成若干块,每个块的大小相同(除了最后一块可能会小于分片大小)。 2. 客户端使用HTTP协议将每个分片逐个上到服务器。可以使用Java的HttpURLConnection类构建HTTP请求,设置请求头部信息和上数据,并将每个分片的数据流写入请求的输出流中。 3. 服务器端接收到每个分片后,将其保存在文件系统或内存中的临时位置。可以使用Java的Servlet或Spring MVC框架来处理上请求,获取分片数据流,并将其写入指定位置。 4. 服务器端在接收到最后一个分片后,将所有分片按照上顺序合并成原始文件。可以使用Java文件操作API将每个分片的内容按顺序写入到同一个文件中。 5. 客户端和服务器端可以约定一个校验机制,用于确保分片的完整性和正确性。可以通过计算每个分片的哈希值或校验和来验证分片的一致性。 6. 客户端和服务器端可以约定一个分片上的超时时间。如果某个分片的上时间超过了设定的超时时间,可以重新上该分片或进行其他处理。 Java分片文件可以提高大文件输效率和稳定性,同时降低了对服务器和网络宽的需求。例如,在网络输过程中,若客户端某个分片上失败,只需重新上该分片,而无需重新输整个大文件。这种方式能够有效地分担服务器和网络的负载,提高文件的可靠性和效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫二牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值