web.xml web-app-servlet.xml controller类中的实现 测试 第一种:测试用JSP为upload.jsp 第二种:测试用程序动态控制 参考资料 web.xml <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>web-app</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/web-app-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>web-app</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> web-app-servlet.xml <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:viewClass="org.springframework.web.servlet.view.JstlView" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 限制上传文件大小,单位byte --> <property name="maxUploadSize" value="1024000000"></property> </bean> controller类中的实现 @RequestMapping(value = "/upload") public String upload(HttpServletRequest request, String parameter) throws Exception { /** 检验传入参数。 */ System.out.println(parameter); MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request; SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd"); /** 构建图片保存的目录 **/ String logoPathDir = "/resources/img/" + dateformat.format(new Date()); /** 得到图片保存目录的真实路径 **/ String logoRealPathDir = request.getSession().getServletContext().getRealPath(logoPathDir); /** 根据真实路径创建目录 **/ File logoSaveFile = new File(logoRealPathDir); if (!logoSaveFile.exists()) logoSaveFile.mkdirs(); /** 页面控件的文件流 **/ MultipartFile multipartFile = multipartRequest.getFile("file"); // 构建非重复文件名称 String logImageName = UUID.randomUUID().toString() + "." + multipartFile.getOriginalFilename(); /** 拼成完整的文件保存路径加文件 **/ String fileName = logoRealPathDir + File.separator + logImageName; File file = new File(fileName); multipartFile.transferTo(file); return "success"; } 测试 测试方法有两种,第一种是通过JSP构建HTML,用户手动上传,第二种是通过程序动态上传。 第一种:测试用JSP为upload.jsp <form action="/common/upload" method="post" enctype="multipart/form-data"> <input type="hidden" name="parameter" value="hifreud"/> <input type="file" name="file"/> <input type="submit" value="upload"/> </form> 第二种:测试用程序动态控制 import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.HttpURLConnection; import java.net.URL; public class Test { public static void main(String[] args) { try { // Could be any string String boundary = "Boundary-b1ed-4060-99b9-fca7ff59c113"; String Enter = "\r\n"; File xml = new File("E:\\test.jpg"); FileInputStream fis = new FileInputStream(xml); URL url = new URL("http://localhost:8080/file_test/common/upload"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("POST"); conn.setUseCaches(false); conn.setInstanceFollowRedirects(true); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); conn.connect(); DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); // part 1 String part1 = "--" + boundary + Enter + "Content-Type: application/octet-stream" + Enter + "Content-Disposition: form-data; filename=\"" + xml.getName() + "\"; name=\"file\"" + Enter + Enter; // part 2 String part2 = Enter + "--" + boundary + Enter + "Content-Type: text/plain" + Enter + "Content-Disposition: form-data; name=\"parameter\"" + Enter + Enter + "hifreud" + Enter + "--" + boundary + "--"; byte[] xmlBytes = new byte[fis.available()]; fis.read(xmlBytes); dos.writeBytes(part1); dos.write(xmlBytes); dos.writeBytes(part2); dos.flush(); dos.close(); fis.close(); System.out.println("status code: " + conn.getResponseCode()); conn.disconnect(); } catch (Exception e) { e.printStackTrace(); } } } 参考资料 springMVC 注解方式实现全程+文件上传 java 发送文件(Http Post),带其他参数