- public static void upload(Plupload plupload, File dir, String filename)
- throws IllegalStateException, IOException {
- int chunks = plupload.getChunks(); // 获取总的碎片数
- int chunk = plupload.getChunk(); // 获取当前碎片(从0开始计数)
- MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) plupload
- .getRequest();
- MultiValueMap<String, MultipartFile> map = multipartRequest
- .getMultiFileMap();
- if (map != null) {
- if (!dir.exists())
- dir.mkdirs(); // 如果目标文件夹不存在则创建新的文件夹
- // 事实上迭代器中只存在一个值,所以只需要返回一个值即可
- Iterator<String> iter = map.keySet().iterator();
- while (iter.hasNext()) {
- String str = (String) iter.next();
- List<MultipartFile> fileList = map.get(str);
- for (MultipartFile multipartFile : fileList) {
- // 因为只存在一个值,所以最后返回的既是第一个也是最后一个值
- plupload.setMultipartFile(multipartFile);
- // 创建新目标文件
- File targetFile = new File(dir.getPath() + "/" + filename);
- // 当chunks>1则说明当前传的文件为一块碎片,需要合并
- if (chunks > 1) {
- // 需要创建临时文件名,最后再更改名称
- File tempFile = new File(dir.getPath() + "/"
- + multipartFile.getName());
- // 如果chunk==0,则代表第一块碎片,不需要合并
- saveUploadFile(multipartFile.getInputStream(),
- tempFile, chunk == 0 ? false : true);
- // 上传并合并完成,则将临时名称更改为指定名称
- if (chunks - chunk == 1) {
- tempFile.renameTo(targetFile);
- }
- } else {
- // 否则直接将文件内容拷贝至新文件
- multipartFile.transferTo(targetFile);
- }
- }
- }
- }
- }
来源: https://www.oschina.net/code/snippet_1469060_58584