package com.phantom.controller;
import com.phantom.controller.reqbody.UploadReqBody;
import com.phantom.entity.OriginFile;
import com.phantom.entity.UserFile;
import com.phantom.service.DownloadService;
import com.phantom.service.UploadService;
import com.phantom.service.UserService;
import com.phantom.service.impl.FileService;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.Part;
import javax.validation.Valid;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author: Jason Xu
* @Date: 2018/4/12
* @Package: com.phantom.controller
* @Description:
* @ModifiedBy:
*/
@RestController
@MultipartConfig
//@RequestMapping("/file/")
//@RequestMapping("/file/")
public class FileAction {
@Resource
private UserService userService;
@Resource
private UploadService uploadService;
@Resource
private DownloadService downloadService;
@Resource
private ModelMapper modelMapper;
private static final String TMP_FILE_PATH = "e:\\test\\";
private static Log logger = LogFactory.getLog(FileAction.class);
@Autowired
private FileService fileService;
@RequestMapping(method = {RequestMethod.POST}, value = {"/webUploader"})
@ResponseBody
public void webUploader(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
try {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
String lsh = "";
if (isMultipart) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// 得到所有的表单域,它们目前都被当作FileItem
List<FileItem> fileItems = upload.parseRequest(request);
String id = "";
String fileName = "";
// 如果大于1说明是分片处理
int chunks = 1;
int chunk = 0;
FileItem tempFileItem = null;
for (FileItem fileItem : fileItems) {
if (fileItem.getFieldName().equals("id")) {
id = fileItem.getString();
} else if (fileItem.getFieldName().equals("name")) {
fileName = new String(fileItem.getString().getBytes("ISO-8859-1"), "UTF-8");
} else if (fileItem.getFieldName().equals("chunks")) {
chunks = NumberUtils.toInt(fileItem.getString());
} else if (fileItem.getFieldName().equals("chunk")) {
chunk = NumberUtils.toInt(fileItem.getString());
} else if (fileItem.getFieldName().equals("multiFile")) {
tempFileItem = fileItem;
} else if (fileItem.getFieldName().equals("lsh")) {
lsh = fileItem.getString();
}
}
//session中的参数设置获取是我自己的原因,文件名你们可以直接使用fileName,这个是原来的文件名
//String fileSysName = request.getSession().getAttribute("fileSysName").toString();
//String realname = fileName.substring(fileName.lastIndexOf("."));//转化后的文件名
String realname = fileName;//转化后的文件名
session.setAttribute("realname",realname);
String filePath = TMP_FILE_PATH + "\\" + lsh + "\\";//文件上传路径
// 临时目录用来存放所有分片文件
String tempFileDir = filePath + id;
File parentFileDir = new File(tempFileDir);
if (!parentFileDir.exists()) {
parentFileDir.mkdirs();
}
// 分片处理时,前台会多次调用上传接口,每次都会上传文件的一部分到后台
File tempPartFile = new File(parentFileDir, realname + "_" + chunk + ".part");
System.out.println("parentFileDir============" + parentFileDir);
FileUtils.copyInputStreamToFile(tempFileItem.getInputStream(), tempPartFile);
// 是否全部上传完成
// 所有分片都存在才说明整个文件上传完成
boolean uploadDone = true;
for (int i = 0; i < chunks; i++) {
File partFile = new File(parentFileDir, realname + "_" + i + ".part");
if (!partFile.exists()) {
uploadDone = false;
continue;
}
}
// 所有分片文件都上传完成
// 将所有分片文件合并到一个文件中
if (uploadDone) {
// 得到 destTempFile 就是最终的文件
String destFilePath = filePath;
File destFolder = new File(destFilePath);
if (!destFolder.exists()) {
destFolder.mkdirs();
}
File destTempFile = new File(destFilePath, realname);
System.out.println("destTempFile========" + destTempFile);
for (int i = 0; i < chunks; i++) {
File partFile = new File(parentFileDir, realname + "_" + i + ".part");
FileOutputStream destTempfos = new FileOutputStream(destTempFile, true);
//遍历"所有分片文件"到"最终文件"中
FileUtils.copyFile(partFile, destTempfos);
destTempfos.close();
}
// 删除临时目录中的分片文件
FileUtils.deleteDirectory(parentFileDir);
} else {
// 临时文件创建失败
if (chunk == chunks -1) {
FileUtils.deleteDirectory(parentFileDir);
}
}
}
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage(), e);
}
}
@RequestMapping("uploadPicture")
@ResponseBody
public void uploads(@RequestParam("file")MultipartFile[] files, String destDir,
HttpServletRequest request, HttpServletResponse response) {
try {
fileService.uploads(files, destDir, request,response);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 分块文件的大小,与前端保持一致
*/
private static final long MAX_CHUNK_SIZE = 5 * 1024 * 1024;
/**
* 功能:接收分块上传的文件块
* 示例:POST users/admin/disk/files
*/
@RequestMapping(value = "/users/{username}/disk/files", method = RequestMethod.POST)
@ResponseBody
//public Map<String, Object> upload(HttpServletRequest req, @Req
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于ssh+hadoop+hbase的简单云盘系统+源代码+文档说明 -------- 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
资源推荐
资源详情
资源评论
收起资源包目录
基于ssh+hadoop+hbase的简单云盘系统+源代码+文档说明 (824个子文件)
FileAction.class 12KB
FileAction.class 12KB
DiskServiceImpl.class 10KB
DiskServiceImpl.class 10KB
TestHbase.class 10KB
TestHbase.class 10KB
UploadServiceImpl.class 9KB
UploadServiceImpl.class 9KB
DownloadServiceImpl.class 7KB
DownloadServiceImpl.class 7KB
JwtUtil.class 6KB
JwtUtil.class 6KB
SysUser.class 6KB
SysUser.class 6KB
HbaseDao.class 6KB
HbaseDao.class 6KB
HomeAction.class 6KB
HomeAction.class 6KB
TestDao.class 6KB
TestDao.class 6KB
OriginFile.class 5KB
OriginFile.class 5KB
UserFile.class 5KB
UserFile.class 5KB
UserFileDaoImpl.class 4KB
UserFileDaoImpl.class 4KB
UserDTO.class 4KB
UserDTO.class 4KB
UserAction.class 4KB
UserAction.class 4KB
VerifyAction.class 4KB
VerifyAction.class 4KB
UserFileDTO.class 4KB
UserFileDTO.class 4KB
DTOConvertUtil.class 4KB
DTOConvertUtil.class 4KB
StringUtils.class 4KB
StringUtils.class 4KB
FileService.class 3KB
FileService.class 3KB
UserFolder.class 3KB
UserFolder.class 3KB
HbaseConn.class 3KB
HbaseConn.class 3KB
UserDaoImpl.class 3KB
UserDaoImpl.class 3KB
UserFolderDaoImpl.class 3KB
UserFolderDaoImpl.class 3KB
PropertiesUtils.class 3KB
PropertiesUtils.class 3KB
SortUtil.class 2KB
SortUtil.class 2KB
FileUtils.class 2KB
FileUtils.class 2KB
SysUserImage.class 2KB
SysUserImage.class 2KB
UserServiceImpl.class 2KB
UserServiceImpl.class 2KB
HdfsDao.class 2KB
HdfsDao.class 2KB
UploadReqBody.class 2KB
UploadReqBody.class 2KB
CheckSumBuilder.class 2KB
CheckSumBuilder.class 2KB
HdfsConn.class 2KB
HdfsConn.class 2KB
UserFolderDTO.class 2KB
UserFolderDTO.class 2KB
WebUtils.class 2KB
WebUtils.class 2KB
ZipUtils.class 2KB
ZipUtils.class 2KB
OriginFileDaoImpl.class 2KB
OriginFileDaoImpl.class 2KB
TestUtils.class 2KB
TestUtils.class 2KB
VerifyInterceptor.class 2KB
VerifyInterceptor.class 2KB
VerifyServiceImpl.class 2KB
VerifyServiceImpl.class 2KB
MoveReqBody.class 2KB
MoveReqBody.class 2KB
SpringUtils.class 2KB
SpringUtils.class 2KB
ShredReqBody.class 1KB
ShredReqBody.class 1KB
DiskService.class 1KB
DiskService.class 1KB
IOUtils.class 1KB
IOUtils.class 1KB
RenameFileReqBody.class 1KB
RenameFileReqBody.class 1KB
LoginReqBody.class 1KB
LoginReqBody.class 1KB
LoginUtil.class 1KB
LoginUtil.class 1KB
NoteInsertReqBody.class 1KB
NoteInsertReqBody.class 1KB
UserFileDao.class 1KB
UserFileDao.class 1KB
共 824 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论
机器学习的喵
- 粉丝: 2015
- 资源: 1784
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于c语言的线性链表的实现和应用
- 艾利和iriver Astell&Kern SP3000 V1.20升级固件
- 律师事务所网站建设与管理功能概述
- Python 端口访问邮件提醒工具
- 基于springboot的抗疫物资管理系统
- 基于C语言的二叉树构建及遍历
- 587833617736230KEY_C0091 STM32简易交通灯仿真设计.zip
- 垃圾废物检测19-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 专项资金申报平台需求规范文档解析及关键技术要求
- TMS320F28377原理图
- Docker以及Docker-Compose的安装与卸载
- 艾利和iriver Astell&Kern SP3000 V1.31升级固件
- 基于C语言的图的实现和遍历
- 周勤富恒升职业学校网络安全渗透测试及解决方案第2版.doc
- images(5).zip
- 计算机程序设计员三级(选择题)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功