SpringBoot上传文件并储存到本地(记录)
主要是通过【MultipartFile】作为参数类型来实现文件上传的。1、相关controller代码如下:@RequestMapping(value = "/upload", method = RequestMethod.POST)public String upload(@RequestParam("file")MultipartFile file) {if (Objects.isNull(f
·
主要是通过【MultipartFile】作为参数类型来实现文件上传的。
1、相关controller代码如下:
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String upload(@RequestParam("file")MultipartFile file) {
if (Objects.isNull(file) || file.isEmpty()) {
//判断非空
return "文件为空,请重新上传";
}
try {
byte[] bytes = file.getBytes();
//要存入本地的地址放到path里面
Path path = Paths.get( FileUtils.UPLOAD_FOLDER + "/");
//如果没有files文件夹,则创建
if (!Files.isWritable(path)) {
Files.createDirectories(path);
}
String extension = FileUtils.getFileExtension(file); //获取文件后缀
FileUtils.getFileByBytes(bytes, FileUtils.UPLOAD_FOLDER, "上传文件" + extension);
return "上传成功";
} catch (Exception e) {
e.printStackTrace();
}
return "上传失败";
}
2、FileUtils.java的文件代码如下:
public class FileUtils {
//这是本地存入的格式,上传到服务器的话,格式类似于,"/root/images/pc/"
public static String UPLOAD_FOLDER = "D:/images/pc/";
/**
* 将文件转换成Byte数组
*
* @param pathStr
* @return
*/
public static byte[] getBytesByFile(String pathStr) {
File file = new File(pathStr);
try {
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
byte[] data = bos.toByteArray();
bos.close();
return data;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将Byte数组转换成文件
*
* @param bytes
* @param filePath
* @param fileName
*/
public static void getFileByBytes(byte[] bytes, String filePath, String fileName) {
BufferedOutputStream bos = null;
FileOutputStream fos = null;
File file = null;
try {
File dir = new File(filePath);
if (!dir.exists() && dir.isDirectory()) {// 判断文件目录是否存在
dir.mkdirs();
}
file = new File(filePath + "\\" + fileName);
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(bytes);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 获取文件后缀
*
* @param File
* @return
*/
public static String getFileExtension(MultipartFile File) {
String originalFileName = File.getOriginalFilename();
return originalFileName.substring(originalFileName.lastIndexOf("."));
}
}
3、特别注意:由于SpringBoot默认上传文件大小为1M,所以在配置文件application.properties添加如下代码:(我这边改的是30M)
#设置文件上传大小 spring.servlet.multipart.max-file-size=31457280 spring.servlet.multipart.max-request-size=31457280
代码自行优化。
Android文件上传请求可参考:https://blog.csdn.net/lpCrazyBoy/article/details/84344646
更多推荐

所有评论(0)