一、前端文件
1. 上传文件的DOM元素
<a href="javascript:;" class="file glyphicon glyphicon-cloud-upload">上传文件
<input type="file" id="input" name="input" onchange="upload()" multiple="multiple" />
</a>
2. 执行上传函数
function upload(){
var files = $("#input").files;
if(files.length<1){
alert("请至少选择一个文件");
return;
}
var index = layer.load(1,{
shade:[0.75,'#fff']
});
var formData=new FormData();
for(var i = 0; i<files.length;i++){
formData.append("files",files[i]);
}
formData.append("currentPath",currentPath);
$.ajax({
type:"post",
url:"${pageContext.request.contextPath}/file/upload",
data:formData,
dataType:"json",
//一下三个参数是向后端传递文件所特有的
cache:false,
//这个参数是jQuery特有的,不进行序列化,因为我们不是json格式的字符串,而是要传文件
processData: false,
//主义这里一定要设置contentType:false,不然会默认为传的是字符串,这样文件就传不过去了
contentType:false,
success:function (data){
if(data.code==200){
layer.msg(data.msg,{icon:6});
getFiles(currentPath);
layer.closeAll("loading");
}else {
layer.msg(data.msg,{icon:5})
}
}
})
}
二、后端文件
1. 上传文件业务层
public Result upload(MultipartFile[] files, String currentPath, HttpServletRequest request) {
String username = ((String) request.getSession().getAttribute("username"));
if(null!=files && files.length>0){
String rootPath = "D:\\yunpan2\\file\\"+username+currentPath;
for(MultipartFile file : files){
String filename = file.getOriginalFilename();
File f = new File(rootPath,filename);
if(!f.exists()){
try {
file.transferTo(f);
} catch (IOException e) {
e.printStackTrace();
return new Result(100,e.getMessage(),null);
}
}else {
return new Result(100,f.getName()+"文件已存在");
}
}
}
//改变文档大小和存储空间大小
String path = "D:\\yunpan2\\file\\"+username;
File file = new File(path);
request.getSession().setAttribute("count",0);
countFileSize(file,request);
int count = (Integer) request.getSession().getAttribute("count");
String fileSize = FileUtils.getDataSize(count);
int row = userDao.updateCountSizeByName(fileSize,username);
if(row!=1){
return new Result(100,"更新云盘已用大小失败",null);
}
return new Result(200,"上传文件成功");
}
2. 递归计算文件大小
/**
* 递归计算文件大小
* @param file
* @param request
*/
private void countFileSize(File file,HttpServletRequest request) {
File[] files = file.listFiles();
if(null != files && files.length>0){
for(File f : files){
if(!f.isDirectory()){
//文件
int count = (Integer) request.getSession().getAttribute("count");
count+=f.length();
request.getSession().setAttribute("count",count);
}else {
//文件夹
countFileSize(f,request);
}
}
}
}
Tips
“MultipartFile” 通常用于处理文件上传操作。它是在Web开发中用于表示上传的文件数据的一种数据类型或接口。
在Java中,MultipartFile是Spring框架提供的一个接口,用于处理HTTP请求中的文件上传。它是org.springframework.web.multipart.MultipartFile接口的实现类的对象,用于表示上传的文件数据。
通过使用MultipartFile,你可以获取上传文件的相关信息,如文件名、文件大小、文件内容等。你还可以将上传的文件保存到服务器的文件系统中,或进行其他的文件处理操作。
以下是一个使用MultipartFile处理文件上传的示例代码:
import org.springframework.web.multipart.MultipartFile;
// 处理文件上传的方法
public void uploadFile(MultipartFile file) {
if (!file.isEmpty()) {
String fileName = file.getOriginalFilename();
long fileSize = file.getSize();
// 将文件保存到服务器的文件系统中
try {
file.transferTo(new File("path/to/save/" + fileName));
System.out.println("File uploaded successfully.");
} catch (IOException e) {
System.out.println("Failed to upload file.");
e.printStackTrace();
}
}
}
在上述示例中,MultipartFile对象file表示上传的文件数据。通过调用getOriginalFilename()方法和getSize()方法,可以获取文件的原始文件名和文件大小。然后,可以使用transferTo()方法将文件保存到指定的路径中。
需要注意的是,MultipartFile是Spring框架提供的一种文件上传处理方式,其他的Web框架或编程语言可能会有不同的实现方式。因此,具体的使用方法可能会因框架或语言而异。