第一种
在包下创建上传前端响应类
import com.alibaba.druid.filter.AutoLoad;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Resp<E> {
private String code;
private String Msg;
private E body;
public static<E> Resp<E> success(E body){
return new Resp<E>("200","上传成功!",body);
}
public static<E> Resp<E> fail(String code,String msg){
return new Resp<E>(code,msg,null);
}
}
在controller层接收前端上传的文件
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class uploadController {
@Autowired
private UploadService uploadService;
@RequestMapping(value = "upload",method = RequestMethod.POST)
@ResponseBody
public Resp<String> upload(@RequestParam("file")MultipartFile file){
return uploadService.upload(file);
}
}
在servcie包下建立upload接口及其实现类处理业务
import org.springframework.web.multipart.MultipartFile;
public interface UploadService {
Resp<String > upload(MultipartFile file);
}
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
@Service
public class UploadServiceImpl implements UploadService {
@Override
public Resp<String> upload(MultipartFile file) {
if (file.isEmpty()){
return Resp.fail("400","文件为空!");
}
String OriginalFilename=file.getOriginalFilename();
String fileName= System.currentTimeMillis()+"."+OriginalFilename.substring(OriginalFilename.lastIndexOf(".")+1);
System.out.println(fileName);
String filePath="F:\\Test\\";
File dest=new File(filePath+fileName);
if(dest.getParentFile().exists())
dest.getParentFile().mkdirs();
try {
file.transferTo(dest);
}catch (Exception e){
e.printStackTrace();
return Resp.fail("500",OriginalFilename+"上传失败!");
}
return Resp.success(fileName);
}
}
第二种
首先我们的前端是普通的文件上传
<form action="上传的地址" enctype="multipart/form-data" method="post">
文件上传:<input type="file" name="file" value="请选择文件上传">
<br>
<input type="submit" value="提交"><input type="reset" value="重置">
</form>
编写一个文件上传工具方法类,里面方法都可调用,根据自己实践的来
import com.alibaba.fastjson.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
public class BaseController {
protected Logger logger = LoggerFactory.getLogger(getClass());
public void writeJson(HttpServletResponse response, String jsonStr) {
response.setContentType("text/json;charset=utf-8");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
PrintWriter pw = null;
try {
pw = response.getWriter();
pw.write(jsonStr);
pw.flush();
} catch (Exception e) {
logger.info("输出JSON数据异常", e);
}finally{
if(pw!=null){
pw.close();
}
}
}
public void writeJsonStr(HttpServletResponse response, String jsonStr) throws IOException {
OutputStream outStream = null;
try {
response.reset();
response.setCharacterEncoding("UTF-8");
outStream = response.getOutputStream();
outStream.write(jsonStr.getBytes("UTF-8"));
outStream.flush();
} catch (IOException e) {
logger.info("输出JSON数据异常(writeJsonStr)", e);
} finally {
if(outStream!=null){
outStream.close();
}
}
}
public void writeJsonStr(HttpServletResponse response, InputStream in) throws IOException {
if(null == in ){
return ;
}
OutputStream outStream = null;
try {
response.reset();
response.setCharacterEncoding("UTF-8");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
outStream = response.getOutputStream();
int len = 0;
byte[] byt = new byte[1024];
while ((len = in.read(byt)) != -1) {
outStream.write(byt, 0, len);
}
outStream.flush();
} catch (IOException e) {
logger.info("输出JSON数据异常(writeJsonStr)", e);
} finally {
if(outStream!=null){
outStream.close();
in.close();
}
}
}
public void writeJson(HttpServletResponse response, Object obj) {
response.setContentType("text/json;charset=utf-8");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
PrintWriter pw = null;
try {
pw = response.getWriter();
pw.write(JSON.toJSONString(obj));
pw.flush();
} catch (Exception e) {
logger.info("输出JSON数据异常", e);
}finally{
if(pw!=null){
pw.close();
}
}
}
public void writeHtml(HttpServletResponse response, String html) {
response.setContentType("text/html;;charset=utf-8");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
PrintWriter pw = null;
try {
pw = response.getWriter();
pw.write(html);
pw.flush();
} catch (Exception e) {
logger.info("输出HTML数据异常", e);
}finally{
if(pw!=null){
pw.close();
}
}
}
}
然后编写测试类继承上面的工具类
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
@Controller
public class test extends BaseController {
@ResponseBody
@RequestMapping("/doupload")
public void uploadPicture(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
ResponseResult result = new ResponseResult();
Map<String, Object> map = new HashMap<String, Object>();
File targetFile = null;
String url = "";
int code = 1;
System.out.println(file);
String fileName = file.getOriginalFilename();
if (fileName != null && fileName != "") {
String returnUrl = "C:\\bskj\\Web\\yrq\\nginx-1.16.1\\html";
String path = "C:\\bskj\\Web\\yrq\\nginx-1.16.1\\html";
System.err.println(path);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String fileF = fileName.substring(fileName.lastIndexOf("."), fileName.length());
fileName = sdf.format(new Date()) + "_" + new Random().nextInt(1000) + fileF;
String fileAdd = "photo";
File file1 = new File(path + "/" + fileAdd);
if (!file1.exists() && !file1.isDirectory()) {
file1.mkdir();
}
targetFile = new File(file1, fileName);
try {
file.transferTo(targetFile);
code = 0;
result.setCode(code);
result.setMessage("图片上传成功");
map.put("url", fileName);
result.setResult(map);
} catch (Exception e) {
e.printStackTrace();
result.setMessage("系统异常,图片上传失败");
}
}
writeJson(response, result);
}
}
在启动类里配置注入一下
@SpringBootApplication
@Configuration
public class PhonegdApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(PhonegdApplication.class, args);
}
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setMaxFileSize(DataSize.ofMegabytes(10));
factory.setMaxRequestSize(DataSize.ofMegabytes(100));
return factory.createMultipartConfig();
}
}
走到这里,我们上传的前后端就已经写好了(但是文件有大小限制)
我们就去调整,给大一点空间,根据自己调整,在配置文件appliaction中增加
spring:
servlet:
multipart:
max-file-size: 10MB ##单个文件最大大小
max-request-size: 100MB ##上传数据总大小