前段文件分片后后端怎么接收

我们现在想做一个大文件分片上传的组件但是文件被分割后后端怎么接受不到啊

前端代码

 $(function () {
        $("#upload").click(function () {
            var ufile = $("#file")[0].files[0];  //文件对象
            var name = ufile.name;       //文件名
            var size = ufile.size;        //总大小
            var succeed = 0;
            var shardSize = 200 * 1024 * 1024;    //以2MB为一个分片
            var shardCount = Math.ceil(size / shardSize);  //总片数
            for (var i = 0; i < 1; ++i) {
                //计算每一片的起始与结束位置
                var start = i * shardSize,
                    end = Math.min(size, start + shardSize);
                var form = new FormData();
                var reader = new FileReader();
                if(size<shardSize){
                    reader.readAsBinaryString(ufile.slice(start, end));
                }else{
                    reader.readAsBinaryString(ufile.slice(start, end));
                }

                reader.onload = (function (file) {
                    console.log(this.result)
                    form.append("file", this.result);
                    var settings = {
                        "async": true,
                        "crossDomain": true,
                        "url": "/file/upload",
                        "method": "POST",
                        "processData": false,
                        "contentType": false,
                        "mimeType": "multipart/form-data",
                        "data": form
                    }

                    $.ajax(settings).done(function (response) {
                       // console.log(response);
                        ++succeed;
                        $("#output").text(succeed + " / " + shardCount);
                    });
                });
            }
        })
    });

后端代码

@RestController
@RequestMapping("/file")
public class FileController {
    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    public void upload(/*@RequestBody*/ @RequestParam(value = "file") MultipartFile file,/*byte[] bytes,*/ HttpServletRequest req, HttpServletResponse res) throws IOException {
        if (!ServletFileUpload.isMultipartContent(req)) {
            System.out.println("hello"+file.getName());
        }
    }
}
阅读 4.6k
4 个回答

经过一番折腾终于ok了,很开心

你直接append("file",ufile.slice(start, end))试试,我很久没碰过分块上传了,你readAsBinaryString处理后应该是传的二进制数据,java我又看不懂,你后台接的数据是什么格式?

后端new file打开文件stream然后写到最后

1.先用fiddler抓包看看请求数据有没有问题.
2.没问题再直接用request.getInputStream()看看输入流里有没有数据
3.如果没数据看看springMVC是不是对request做了特殊处理(springMVC已经把流读完了,然后封装成一个对象给你)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题