首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java 文件分块下传服务器端源代码

2013-03-12 
Java 文件分块上传服务器端源代码本博客将介绍如何进行文件的分块上传。如果读者还想了解文件的“分块”下载

Java 文件分块上传服务器端源代码
        本博客将介绍如何进行文件的分块上传。如果读者还想了解文件的“分块”下载相关内容可以去参考博客《Java 服务器端支持断点续传的源代码【支持快车、迅雷】》。
        本文侧重介绍服务器端,客户端端请参考本篇博客的姊妹篇《Java 文件分块上传客户端源代码》,关于分块上传的思想及其流程,已在该博客中进行了详细说明,这里不再赘述。

        直接上代码。接收客户端 HTTP 分块上传请求的 Spring MVC 控制器源代码如下:

/** * 组装文件 *  */private void assembleFileWithBlock(BlockPreuploadFileInfo preUpload) {String dirPath = preUpload.getDirPath();// 开始在指定目录组装文件String uploadedUrl = null;String[] separatedFiles;String[][] separatedFilesAndSize;int fileNum = 0;File file = new File(dirPath);separatedFiles = file.list();separatedFilesAndSize = new String[separatedFiles.length][2];Arrays.sort(separatedFiles);fileNum = separatedFiles.length;for (int i = 0; i < fileNum; i++) {separatedFilesAndSize[i][0] = separatedFiles[i];String fileName = dirPath + separatedFiles[i];File tmpFile = new File(fileName);long fileSize = tmpFile.length();separatedFilesAndSize[i][1] = String.valueOf(fileSize);}RandomAccessFile fileReader = null;RandomAccessFile fileWrite = null;long alreadyWrite = 0;int len = 0;byte[] buf = new byte[1024];try {uploadedUrl = Global.UPLOAD_ABSOLUTE_PAHT_ + Global.PATH_SEPARATIVE_SIGN + preUpload.getUid() + Global.PATH_SEPARATIVE_SIGN + preUpload.getUuid();fileWrite = new RandomAccessFile(uploadedUrl, "rw");for (int i = 0; i < fileNum; i++) {fileWrite.seek(alreadyWrite);// 读取fileReader = new RandomAccessFile((dirPath + separatedFilesAndSize[i][0]), "r");// 写入while ((len = fileReader.read(buf)) != -1) {fileWrite.write(buf, 0, len);}fileReader.close();alreadyWrite += Long.parseLong(separatedFilesAndSize[i][1]);}fileWrite.close();preUpload.setStatus(Global.ASSEMBLED);preUpload.setServerPath(uploadedUrl);getBaseDao().update("upload.updatePreUploadInfo", preUpload);if(Global.BLOCK_UPLOAD_TO!=Global.BLOCK_UPLOAD_TO_LOCAL){//组装完毕没有问题  删除掉S2/S3上的blockString[] path=preUpload.getS3BlockUrl();for (String string : path) {try {if(Global.BLOCK_UPLOAD_TO==Global.BLOCK_UPLOAD_TO_S2){S2Util.deleteFile(preUpload.getBucketUrl(), string);}else{S3Util.deleteFile(preUpload.getBucketUrl(), string);}} catch (Exception e) {log.error(e.getMessage(), e);}}}if (log.isInfoEnabled())log.info(preUpload.getUuid() + " assembleFileWithBlock");} catch (IOException e) {log.error(e.getMessage(), e);try {if (fileReader != null) {fileReader.close();}if (fileWrite != null) {fileWrite.close();}} catch (IOException ex) {log.error(e.getMessage(), e);}}}

        BlockPreuploadFileInfo 是我们自定义的业务文件处理 bean。
        OK,分块上传的服务器、客户端源代码及其工作流程至此已全部介绍完毕,以上源代码全部是经过项目实践过的,大部分现在仍运行于一些项目之中。有兴趣的朋友可以自己动手,将以上代码自行改造,看看能否运行成功。如果遇到问题可以在本博客下跟帖留言,大家一起讨论讨论。

热点排行