cc域名做网站好吗,wordpress架设系统,wordpress获取当前页面链接,南阳logo设计公司文件的分片上传
格外功能是#xff1a;秒传#xff0c;断点续传。
今天最惨#xff0c;上午找bug#xff0c;下午一直在修改#xff0c;晚上脑子what了#xff0c;混乱的很#xff0c;数据表之间的逻辑不清晰#xff0c;导致我传值#xff0c;还有操作数据库一直有问…文件的分片上传
格外功能是秒传断点续传。
今天最惨上午找bug下午一直在修改晚上脑子what了混乱的很数据表之间的逻辑不清晰导致我传值还有操作数据库一直有问题这里最大的问题就是文件唯一了然后要单独建立一个file表不与班级有关班级文件表可以单独建立可是当时想着把正在上传的和已经上传的建立了两张表现在想想都后悔如果要修改好多要改的所以就将就使用两张表吧。
8/4今天一上午都在检查bug都没解决现在终于解决 1由于我的socket是new的一个导致我发请求在同一个返回的请求类型当我得到服务器可以上传文件信息时 我立刻上传文件所有分片当我的分片发完后立刻发文件上传完成请求这时候又是发送在原来的socket里面 当服务端接受到文件上传完成立刻合并分片会导致导致我new的哪个socket里的请求上传文件程序还没有 完成导致我的文件分片列表files里为null 2在合并文件时我直接对文件分片进行Array.sort(),这样导致文件合片顺序错误part11 part12 part2
文件分片代码
public static void splitFile(File file,String md5) throws IOException {int partCounter 0;byte[] buffer new byte[CHUNK_SIZE];String fileName file.getName();//创建目录File dir new File(src/file/ md5);if (!dir.exists()) {boolean created dir.mkdirs(); // 创建目录及必要的父目录if (!created) {throw new IOException(Failed to create directory: dir.getAbsolutePath());}}try (FileInputStream fis new FileInputStream(file);BufferedInputStream bis new BufferedInputStream(fis)) {int bytesAmount 0;while ((bytesAmount bis.read(buffer)) 0) {String filePartName String.format(%s.part%d, md5, partCounter);File newFile new File(dir, filePartName);try (FileOutputStream out new FileOutputStream(newFile)) {out.write(buffer, 0, bytesAmount);}}}这样就可以创建很多分片然后可以分部上传。
在我上传文件时是不接受服务端返回的消息直接发送所有消息的有问题。后面再修改。
这里暂停上传时要修改一下。
在上传完成之后
服务端进行文件合并
public static File fileMerge(MyLargerFile myLargerFile) throws IOException {File newFile new File(src/resource/files/ myLargerFile.getMd5().myLargerFile.getOriginalName());File[] files new File(src/resource/file/ myLargerFile.getMd5()part).listFiles();Arrays.sort(files, (f1, f2) - {// 分割文件名获取分片编号部分String[] parts1 f1.getName().split(\\.part);String[] parts2 f2.getName().split(\\.part);// 提取并解析分片编号int part1 Integer.parseInt(parts1[1]);int part2 Integer.parseInt(parts2[1]);// 比较分片编号return Integer.compare(part1, part2);});try(FileOutputStream out new FileOutputStream(newFile)) {for (File file1 : files) {System.out.println(file1.getName());try (FileInputStream fis new FileInputStream(file1);BufferedInputStream bis new BufferedInputStream(fis)){int bytesAmount 0;byte[] buffer new byte[CHUNK_SIZE];while ((bytesAmount bis.read(buffer)) ! -1) {out.write(buffer, 0, bytesAmount);}}}}for (File file : files){deleteFile(file);}deleteFile(new File(src/resource/file/ myLargerFile.getMd5()part));return newFile;}private static void deleteFile(File file){if (!file.delete()) {System.out.println(不能删除该文件: file.getName());}}混乱点
在这里表有点多就导致逻辑有点混乱这里应该先要建立文件上传记录然后上传完成后修改数据还有混乱的就是数据的传递导致客户端和服务端的赋值处理数据出现问题这个特别严重主要还是因为传递的参数过多导致混淆。
今天还有一个坑就是进行合并文件时进行文件的排序 Arrays.sort(files, (f1, f2) - {// 分割文件名获取分片编号部分String[] parts1 f1.getName().split(\\.part);String[] parts2 f2.getName().split(\\.part);// 提取并解析分片编号int part1 Integer.parseInt(parts1[1]);int part2 Integer.parseInt(parts2[1]);// 比较分片编号return Integer.compare(part1, part2);
});