文件同步和异步上传

论坛 期权论坛 脚本     
匿名技术用户   2021-1-5 13:29   99   0

一、准备工作:

先在maven下搭建一个ssh框架:

1、依赖包pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.iflytek</groupId>
  <artifactId>mavensshmzyw</artifactId>
  <version>0.0.1-SNAPSHOT</version>
 <packaging>war</packaging>

 <properties>
  <spring.version>4.3.13.RELEASE</spring.version>
 </properties>
 <dependencies>

  <!-- spring begin -->
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-orm</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-jdbc</artifactId>
   <version>${spring.version}</version>
  </dependency>

  <!-- spring end -->

  <!-- hibernate begin -->
  <dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-core</artifactId>
   <version>4.3.11.Final</version>
  </dependency>


  <!-- hibernate end -->

  <!-- datasource pool begin -->
  <dependency>
   <groupId>com.mchange</groupId>
   <artifactId>c3p0</artifactId>
   <version>0.9.5.2</version>
  </dependency>
  <!-- datasource pool end -->


  <!-- servlet.jar jstl-api.jar -->
  <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>3.0.1</version>
   <scope>provided</scope>
  </dependency>
  <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>jstl</artifactId>
   <version>1.2</version>
  </dependency>
  <dependency>
   <groupId>javax.servlet.jsp</groupId>
   <artifactId>javax.servlet.jsp-api</artifactId>
   <version>2.3.1</version>
   <scope>provided</scope>
  </dependency>
  <!-- servlet.jar jstl-api.jar end -->


  <!-- jackson begin -->
  <dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-core</artifactId>
   <version>2.9.2</version>
  </dependency>
  <dependency>
   <groupId>com.fasterxml.jackson.core</groupId>
   <artifactId>jackson-databind</artifactId>
   <version>2.9.2</version>
  </dependency>

  <!-- jackson end -->

  <!-- fileupload begin -->

  <dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.3.1</version>
  </dependency>
  <!-- fileupload end -->
  
  
  <dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjrt</artifactId>
   <version>1.8.10</version>
  </dependency>
  <dependency>
   <groupId>aopalliance</groupId>
   <artifactId>aopalliance</artifactId>
   <version>1.0</version>
  </dependency>
  <dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjweaver</artifactId>
   <version>1.8.10</version>
  </dependency>



 </dependencies>

</project>


2、资源文件夹:

(1、)spring配置文件spring.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

 <context:component-scan base-package="com.iflytek">
  <context:exclude-filter type="annotation"
   expression="org.springframework.stereotype.Controller" />
 </context:component-scan>
 
 <context:property-placeholder location="classpath:jdbc.properties"/>
 
 <bean id="dataSource"
  class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
  <property name="driverClass" value="${jdbc.driverClassName}"></property>
  <property name="jdbcUrl" value="${jdbc.url}"></property>
  <property name="user" value="${jdbc.username}"></property>
  <property name="password" value="${jdbc.password}"></property>
 </bean>
 
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource"></property>
  <property name="packagesToScan" value="com.iflytek.domain"></property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
    <!-- <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> -->
    <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
    <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
   </props>
  </property>
 </bean>

 <!-- 配置声明式事务管理(采用注解的方式) -->
 <bean id="txManager"
  class="org.springframework.orm.hibernate4.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory"></property>
 </bean>
 <tx:annotation-driven transaction-manager="txManager" />
</beans>

用到的jdbc配置文件jdbc.properties:

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@172.16.130.35:1521:orcl
jdbc.username=wtyymmyw
jdbc.password=wtyymmyw


hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
hibernate.hbm2ddl.auto=create
hibernate.show_sql=true
hibernate.format_sql=true

(2、)springmvc配置文件springmvc.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 xmlns:mvc="http://www.springframework.org/schema/mvc"
 xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

 <mvc:annotation-driven />

 <!-- 静态资源文件不拦截 -->
 <mvc:resources location="/assets/" mapping="/assets/**"></mvc:resources>

 <context:component-scan base-package="com.iflytek.controller">
  <context:include-filter type="annotation"
   expression="org.springframework.stereotype.Controller" />
 </context:component-scan>

 <bean
  class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
  <property name="viewResolvers">
   <list>
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
    <bean
     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <property name="prefix" value="/WEB-INF/jsp/" />
     <property name="suffix" value=".jsp" />
    </bean>
   </list>
  </property>
  <property name="defaultViews">
   <list>
    <bean
     class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
   </list>
  </property>
 </bean>


 <bean id="multipartResolver"
  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <property name="defaultEncoding" value="utf-8" />
  <property name="maxUploadSize" value="10485760000" />
  <property name="maxInMemorySize" value="40960" />
 </bean>


</beans>


3、web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
  </context-param>
  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>


二、测试:

先在F盘下创建一个zt文件夹。

1、同步上传:

后台:

package com.iflytek.controller;

import java.io.File;
import java.io.IOException;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

@Controller

public class Text {
@GetMapping("/test")
public String goTest(){
   return "test";
}

@PostMapping("/test")
@ResponseBody
public void upfile(@RequestParam("file1") MultipartFile[]  files,HttpServletRequest req) throws IllegalStateException, IOException{
 System.out.println(req.getParameter("name"));
 System.out.println("文件上传");
 for(int i=0;i<files.length;i++){
  String path="F:/zt/"+new Date().getTime()+files[i].getOriginalFilename();
  File newfile=new File(path);
  files[i].transferTo(newfile);
 }
 
}
}

前台:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="test" enctype="multipart/form-data">
<input type="text" name="name">
<input type="file" name="file1">
<input type="file" name="file1">
<input type="submit" value="提交">
</form>
</body>
</html>


2、异步上传:

前台改为ajax:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
 <script type="text/javascript" src="assets/jquery.min.js"></script>
 <script>
 $(function(){
  $("form").submit(function(){
    var formData = new FormData();
    var dt=$("#name").val();
    alert(dt);
    formData.append("name", dt); 
             formData.append("file1", document.getElementById("file1").files[0]); 
             formData.append("file1", document.getElementById("file2").files[0]);   
             $.ajax({
                 url: "test",
                 type: "POST",
                 data: formData,
                 /**
                 *必须false才会自动加上正确的Content-Type
                 */
                 contentType: false,
                 /**
                 * 必须false才会避开jQuery对 formdata 的默认处理
                 * XMLHttpRequest会对 formdata 进行正确的处理
                 */
                 processData: false,
                 success: function (data) {
                     
                 }
             });
   return false;
  }) 
  
      
 })
 </script>
</head>
<body>

<form method="post"  >
<input type="text" name="name" id="name">
<input type="file" name="file1" id="file1">
<input type="file" name="file1" id="file2">
<input type="submit" value="提交">
</form>
</body>
</html>


注:以上是上传至自定义的目录,现在如果上传到项目中,如放在assets下的img文件中。只需把后台的path改为:

String path="D:/javaweb"+req.getContextPath()+"/src/main/webapp/assets/img/"+new Date().getTime()+files[i].getOriginalFilename();

或:

 String name = new Date().getTime() + files[0].getOriginalFilename();
    String path =  System.getProperty("user.dir")
            +"/src/main/webapp/assets/img/" + name;

以此类推,现在如果要上传多组图片:

@RequestMapping("/add")
 @ResponseBody
 public String add(@RequestParam("file1") MultipartFile[] files1,
   @RequestParam("file2") MultipartFile[] files2, String courseId) {
  
  System.out.println("详情图第一张图:"+files1[0].getOriginalFilename() + "  二维码图第一张图"
    + files2[0].getOriginalFilename());
  return JSONUtils.toJSONString(StandardJSONResult.getSuccessInstance());
 }

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP