最近很想写一写东西,想把自己做过的功能做个记录。突然就想起来那就写个博客吧! 废话不多说直接上代码!
功能实现 :前台操作js form表单提交 传递参数 上传文件并回显预览图片
前端传参需要使用formData 的方式上传文件
js 代码如下
var fileName=$("#fileName").val();//文件名称
var fileType = $("#fileType option:selected").val();//文件类型
var form = document.getElementById(“form-sysFile-edit”);
var formdata = new FormData(form);
formdata.append(“fileType”,fileType);
$.ajax({
url: url,
data: formdata,
type: “post”,
processData: false,
contentType: false,
success: function(result) {
$.operate.saveSuccess(result);
}
})
这个东西 不用多说了 很简单对吧 参数传递到后端 接手 操作
对了 切记不可忘记在form 表单中添加配置
下面我们直接上后端代码
后端接收数据后调用上传工具类 上传文件 其实就是 转存功能
啥也不说了 上代码 才是硬道理
package com.snsoft.common.utils.file;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.snsoft.common.utils.StringUtils;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.tomcat.util.http.fileupload.FileUploadBase.FileSizeLimitExceededException;
import org.springframework.web.multipart.MultipartFile;
import com.snsoft.common.exception.file.FileNameLengthLimitExceededException;
import com.snsoft.framework.config.SnsoftConfig;
import javax.servlet.http.HttpServletRequest;
/**
-
文件上传工具类
-
@author snsoft
/
public class FileUploadUtils {
/*- 默认大小 50M
*/
public static final long DEFAULT_MAX_SIZE = 52428800;
/**
- 默认上传的地址
*/
private static String defaultBaseDir = SnsoftConfig.getProfile();
/**
- 默认的文件名最大长度
*/
public static final int DEFAULT_FILE_NAME_LENGTH = 200;
/**
- 默认文件类型jpg
*/
public static final String IMAGE_JPG_EXTENSION = “.jpg”;
private static int counter = 0;
public static void setDefaultBaseDir(String defaultBaseDir) {
FileUploadUtils.defaultBaseDir = defaultBaseDir;
}public static String getDefaultBaseDir() {
return defaultBaseDir;
}/**
- 以默认配置进行文件上传
- @param file 上传的文件
- @return 文件名称
- @throws Exception
*/
public static final String upload(MultipartFile file) throws IOException {
try {
return upload(getDefaultBaseDir(), file, FileUploadUtils.IMAGE_JPG_EXTENSION);
} catch (Exception e) {
throw new IOException(e);
}
}
/**
- 根据文件路径上传
- @param baseDir 相对应用的基目录
- @param file 上传的文件
- @return 文件名称
- @throws IOException
*/
public static final String upload(String baseDir, MultipartFile file) throws IOException {
try {
return upload(baseDir, file, FileUploadUtils.IMAGE_JPG_EXTENSION);
} catch (Exception e) {
throw new IOException(e);
}
}
/**
-
文件上传
-
@param baseDir 相对应用的基目录
-
@param file 上传的文件
-
@param extension 上传文件类型 传null,将自动获取上传文件的后缀作为文件的后缀。
-
@return 返回上传成功的文件名
-
@throws FileSizeLimitExceededException 如果超出最大大小
-
@throws FileNameLengthLimitExceededException 文件名太长
-
@throws IOException 比如读写文件出错时
*/
public static final String upload(String baseDir, MultipartFile file, String extension) throws FileUploadBase.FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException {
int fileNamelength = file.getOriginalFilename().length();
String fileAllName = file.getOriginalFilename();
if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) {
throw new FileNameLengthLimitExceededException(fileAllName, fileNamelength, FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
}assertAllowed(file);
String prefix= extension;
if(fileAllName.contains(".")){
prefix=fileAllName.substring(fileAllName.lastIndexOf("."));
if(StringUtils.isNotEmpty(extension)){
prefix = extension;
}
}String fileName = encodingFilename(file.getOriginalFilename(), prefix);
File desc = getAbsoluteFile(baseDir, baseDir + fileName);
file.transferTo(desc);
return fileName;
}
private static final File getAbsoluteFile(String uploadDir, String filename) throws IOException {
File desc = new File(File.separator + filename);if (!desc.getParentFile().exists()) { desc.getParentFile().mkdirs(); } if (!desc.exists()) { desc.createNewFile(); } return desc;
}
/**
- 编码文件名
*/
private static final String encodingFilename(String filename, String extension) {
filename = filename.replace("_", " ");
filename = new Md5Hash(filename + System.nanoTime() + counter++).toHex() + extension;
return filename;
}
/**
- 文件大小校验
- @param file 上传的文件
- @return
- @throws FileSizeLimitExceededException 如果超出最大大小
*/
public static final void assertAllowed(MultipartFile file) throws FileUploadBase.FileSizeLimitExceededException {
long size = file.getSize();
if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE) {
throw new FileUploadBase.FileSizeLimitExceededException(“not allowed upload upload”, size, DEFAULT_MAX_SIZE);
}
}
/lsq 上传/
/**
- 文件上传方法
*/
public static String fileUpLoad(MultipartFile[] files, String path,String suffix)
throws IOException {if (files != null && files.length > 0) { for (int i = 0; i < files.length; i++) { MultipartFile file = files[i]; // 保存文件 return saveFile(file, path,suffix); } } return "";
}
/**
- 保存上传文件
- @param
- @param file
- @return
*/
public static String saveFile(MultipartFile file, String path,String suffix) {
SimpleDateFormat df = new SimpleDateFormat(“yyyyMMdd”);//设置日期格式
String time=df.format(new Date());
String pathAss="/file/"+time+"/";
if (!file.isEmpty()) {
try {
File saveDirPath = new File(path+pathAss);
if (!saveDirPath.exists()) {
saveDirPath.mkdirs();
}
String fileName = encodingFilename(file.getOriginalFilename(), suffix);
File file1 = new File(saveDirPath,fileName);
// 转存文件
file.transferTo(file1);
String url=pathAss+fileName;
return url;
} catch (Exception e) {
e.printStackTrace();
}
}
return “”;
} - 默认大小 50M
}
下面我们说一下spring boot 配置虚拟路径
其实很简单 so easy
上代码 我觉
profile: E:/workspace/IDEA/profile/
mvc:
static-path-pattern: /**
resources:
static-locations: classpath:/META-INF/resources/,classpath:/resources/, classpath:/static/, classpath:/public/, file:${profile}
ok 因为我喜欢用 yml 格式 所有复制的就是这个 很简单 file 里面就是你的 上传文件的路径
OK了 就是这么简单