知识大全 Java 文件分块上传服务器端源代码
Posted 文件
篇首语:知识是为老年准备的最好的食粮。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java 文件分块上传服务器端源代码相关的知识,希望对你有一定的参考价值。
Java 文件分块上传服务器端源代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
直接上代码 接收客户端 HTTP 分块上传请求的 Spring MVC 控制器源代码如下 [java] @Controller public class UploadController extends BaseController private static final Log log = LogFactory getLog(UploadController class) private UploadService uploadService; private AuthService authService; /** * 大文件分成小文件块上传 一次传递一块 最后一块上传成功后 将合并所有已经上传的块 保存到File Server * 上相应的位置 并返回已经成功上传的文件的详细属性 当最后一块上传完毕 返回上传成功的信息 此时用getFileList查询该文件 * 该文件的uploadStatus为 client请自行处理该状态下文件如何显示 (for UPS Server) * */ @RequestMapping( /core/v /file/upload ) @ResponseBody public Object upload(HttpServletResponse response @RequestParam(value = client_id required = false) String appkey @RequestParam(value = sig required = false) String appsig @RequestParam(value = token required = false) String token @RequestParam(value = uuid required = false) String uuid @RequestParam(value = block required = false) String blockIndex @RequestParam(value = file required = false) MultipartFile multipartFile @RequestParam Map<String String> parameters) checkEmpty(appkey BaseException ERROR_CODE_ ) checkEmpty(token BaseException ERROR_CODE_ ) checkEmpty(uuid BaseException ERROR_CODE_ ) checkEmpty(blockIndex BaseException ERROR_CODE_ ) checkEmpty(appsig BaseException ERROR_CODE_ ) if (multipartFile == null) throw new BaseException(BaseException ERROR_CODE_ ) // 上传文件不存在 Long uuidL = parseLong(uuid BaseException ERROR_CODE_ ) Integer blockIndexI = parseInt(blockIndex BaseException ERROR_CODE_ ) Map<String Object> appMap = getAuthService() validateSigature(parameters) AccessToken accessToken = CasUtil checkAccessToken(token appMap) Long uid = accessToken getUid() String bucketUrl = accessToken getBucketUrl() // 从上传目录拷贝文件到工作目录 String fileAbsulutePath = null; try fileAbsulutePath = pyFile(multipartFile getInputStream() multipartFile getOriginalFilename()) catch (IOException ioe) log error(ioe getMessage() ioe) throw new BaseException(BaseException ERROR_CODE_ ) // 上传文件不存在 File uploadedFile = new File(Global UPLOAD_TEMP_DIR + fileAbsulutePath) checkEmptyFile(uploadedFile) // file 非空验证 Object rs = uploadService upload(uuidL blockIndexI uid uploadedFile bucketUrl) setHttpStatusOk(response) return rs;
// TODO 查看下这里是否有问题 // 上传文件非空验证 private void checkEmptyFile(File file) if (file == null || file getAbsolutePath() == null) throw new BaseException(BaseException ERROR_CODE_ ) // 上传文件不存在 /** * 写文件到本地文件夹 * * @throws IOException * 返回生成的文件名 */ private String copyFile(InputStream inputStream String fileName) OutputStream outputStream = null; String tempFileName = null; int pointPosition = fileName lastIndexOf( ) if (pointPosition < ) // myvedio tempFileName = UUID randomUUID() toString() // d d e aad dd a f b ff else // myvedio flv tempFileName = UUID randomUUID() + fileName substring(pointPosition) // d d e aad dd a f b ff flv try outputStream = new FileOutputStream(Global UPLOAD_TEMP_DIR + tempFileName) int readBytes = ; byte[] buffer = new byte[ ]; while ((readBytes = inputStream read(buffer )) != ) outputStream write(buffer readBytes) return tempFileName; catch (IOException ioe) // log error(ioe getMessage() ioe) throw new BaseException(BaseException ERROR_CODE_ ) // 上传文件不存在 finally if (outputStream != null) try outputStream close() catch (IOException e) if (inputStream != null) try inputStream close() catch (IOException e) /** * 测试此服务是否可用 * * @param response * @return * @author zwq */ @RequestMapping( /core/v /file/testServer ) @ResponseBody public Object testServer(HttpServletResponse response) setHttpStatusOk(response) return Global SUCCESS_RESPONSE; public UploadService getUploadService() return uploadService; public void setUploadService(UploadService uploadService) this uploadService = uploadService; public void setAuthService(AuthService authService) this authService = authService; public AuthService getAuthService() return authService; 比如要上传的文件是 test k mp 对照《Java 文件分块上传客户端源代码》中分块上传服务器对分块文件参数定义的名字 file upload 方法里使用的是 MultipartFile 接收该对象 对于每次的 HTTP 请求 使用 copyFile 方法将文件流输出到服务器本地的一个临时文件夹里 比如作者的是 D:/defonds/syncPath/uploadTemp 该文件下会有 b b a f efd e ada mp 临时文件生成用于保存上传文件流 分块依次上传 当所有块都上传完毕之后 将这些临时文件都转移到服务器指定目录中 比如作者的这个目录是 D:/defonds/syncPath/file 在该文件夹下会有/ /temp_dir_ _ 目录生成 而 uploadTemp 的临时文件则被挨个转移到这个文件夹下 生成形如 part 的文件 以下是文件转移的源代码 [java] /** * 把所有块从临时文件目录移到指定本地目录或S /S * * @param preUpload */ private void moveBlockFiles(BlockPreuploadFileInfo preUpload) @SuppressWarnings( unchecked ) String[] s BlockUrl=new String[preUpload getBlockNumber()]; String[] localBlockUrl=new String[preUpload getBlockNumber()];//本地的块文件路径 以便以后删除 List<BlockUploadInfo> blocks = (List<BlockUploadInfo>) getBaseDao() queryForList( upload getBlockUploadFileByUuid preUpload getUuid()) String tempDirName = SyncUtil getTempDirName(preUpload getUuid() preUpload getUid()) String parentPath = Global UPLOAD_ABSOLUTE_PAHT_ + Global PATH_SEPARATIVE_SIGN + String valueOf(preUpload getUid()) String dirPath = parentPath + Global PATH_SEPARATIVE_SIGN + tempDirName; new File(dirPath) mkdirs() //创建存放块文件的文件夹 (本地) int j= ; for (BlockUploadInfo info : blocks) try String strBlockIndex = createStrBlockIndex(info getBlockIndex()) String suffixPath = preUpload getUuid() + part + strBlockIndex; String tempFilePath = info getTempFile() File tempFile = new File(tempFilePath) File tmpFile = new File(dirPath + suffixPath) if (tmpFile exists()) FileUtils deleteQuietly(tmpFile) FileUtils moveFile(tempFile tmpFile) localBlockUrl[j]=dirPath + suffixPath; j++; info setStatus(Global MOVED_TO_NEWDIR) getBaseDao() update( upload updateBlockUpload info) if (log isInfoEnabled()) (preUpload getUuid() + + info getBuId() + moveBlockFiles ) catch (IOException e) log error(e getMessage() e) throw new BaseException( file not found ) preUpload setLocalBlockUrl(localBlockUrl) preUpload setDirPath(dirPath) preUpload setStatus(Global MOVED_TO_NEWDIR) getBaseDao() update( upload updatePreUploadInfo preUpload) private String createStrBlockIndex(int blockIndex) String strBlockIndex; if (blockIndex < ) strBlockIndex = + blockIndex; else if ( <= blockIndex && blockIndex < ) strBlockIndex = + blockIndex; else if ( <= blockIndex && blockIndex < ) strBlockIndex = + blockIndex; else strBlockIndex = + blockIndex; return strBlockIndex; 最后是文件的组装源代码 [java] /** * 组装文件 * */ private void assembleFileWithBlock(BlockPreuploadFileInfo preUpload) String dirPath = preUpload getDirPath() // 开始在指定目录组装文件 String uploadedUrl = null; String[] separatedFiles; String[][] separatedFilesAndSize; int fileNum = ; File file = new File(dirPath) separatedFiles = file list() separatedFilesAndSize = new String[separatedFiles length][ ]; Arrays sort(separatedFiles) fileNum = separatedFiles length; for (int i = ; i < fileNum; i++) separatedFilesAndSize[i][ ] = separatedFiles[i]; String fileName = dirPath + separatedFiles[i]; File tmpFile = new File(fileName) long fileSize = tmpFile length() separatedFilesAndSize[i][ ] = String valueOf(fileSize)
cha138/Article/program/Java/hx/201311/26424相关参考
PHP文件上传代码用法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! php文件上传代码编写过程
PHP无刷新上传文件实现代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! index <
想要拷贝一份项目代码到家里但是由于是从公司svn服务器上checkout下来的其中有很多svn文件所以就写了个小工具删除svn文件夹就可以缩小整个工程大小 packagedeletefile;
C#实现按日期命名上传文件代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  
Java上传文件(简单例子) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! jsp页面 <
Java文件上传相关知识及得到后缀名 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 文件上传功能
php教程curl模仿ftp<?if(isset($_post[submit])) if(!empty($_files[upload][name]))  
知识大全 Java利用HttpURLConnection发送post请求上传文件
Java利用HttpURLConnection发送post请求上传文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶
Java做的比较完善的FTP连接上传下载文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这是
一款利用asp文件上传组件把文件上传到服务器之前进行判断文件大小否超过指定大小了本实例讲的是upload_xsoft文件上传组件哦filefilesize>就可以限制文件为多少klishix