前段代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>Title
后台代码
import cloud.user.portal.utils.StringUtils;import org.springframework.web.bind.annotation.CrossOrigin;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import javax.servlet.http.HttpServletRequest;import java.io.File;import java.io.IOException;import java.util.Collection;import java.util.Map;/** * Created by Administrator on 2018/1/26. MultipartFile属于 * spring-web包里的东西,需要自己下载一个 */@RestController@RequestMapping("/shapeFile")public class ShapeFileController { @RequestMapping(value="/upload",method = RequestMethod.POST) @CrossOrigin public Object getFile(HttpServletRequest request){ /** 下边这个是获取非文件的属性值方法 **/ String uploadDir= request.getParameter("uploadDir"); MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;// ListfileList = multipartRequest.getFiles("file"); Map fileMap = multipartRequest.getFileMap(); if(fileMap == null || fileMap.size() == 0){ return addResultMapMsg(false,"请上传文件,注意文件的name属性为file"); } Collection files = fileMap.values(); for(MultipartFile file:files){ /** 注意这里获取的个数,是根据前端form表单里有几个,type=file来决定的, 比如你虽然只点选了一个文件,上传,但这里实际上回有两个MultipartFile对 象,只不过其中一个MutipartFile的文件名会为空,这就是为什么下边会有个判断文件名 为空的步骤**/ String req= file.getOriginalFilename(); if(StringUtils.isBlank(req)){ continue; } File tempFile = getTmpFile(req); System.out.println(tempFile.getAbsolutePath()); if(!tempFile.exists()){ tempFile.getParentFile().mkdirs(); try { tempFile.createNewFile(); file.transferTo(tempFile); } catch (IOException e) { e.printStackTrace(); } } System.out.println(req); } return null; } /** 下边这个是好方法,希望各位能用起来,虽然是个小方法,但我其实真不舍得贴出来,是JAVA自带的方法 **/ public File getTmpFile(String fileName) { File tmpDir = FileUtils.getTempDirectory(); System.out.println("========"+tmpDir.getAbsolutePath()); String tmpFileName = (Math.random() * 10000 + "").replace(".", "")+"_"+fileName; return new File(tmpDir, tmpFileName); }}
这里需要注意的是:文件上传时,你只选了一个文件上传,但是因为你有两个type=file的标签,后台接收到的MultipartFile也会是两个,但是其中一个的文件名会是空而已,所以需要加一个判断。