最近公司要求做一个上传pdf文件后将文件转换为翻页图片的小工具,我是这么做的
1.先找图片翻页的demo,微软有现有的产品turn.js感兴趣的可以自己看一下 ,有双页的有单页的,因为我司要求手机端使用,所以用的是单页的demo,我下面会附我的demo链接;
2.解决pdf文件转图片的功能开发;先是在配置文件里写固定路径读取文件,之后再说上传的入口;
3.提供上传文件功能,将文件直接转换图片;
问题就出在了第3步上,因为是个小工具,所以我就直接创建的一个javaweb项目,没有使用任何框架。
在前端写好jsp后,利用form表单进行file类型文件的传递,后天获取的值始终是null;
上网查了一下午,总结了一下六个原因(当然,只有最后一个原因才是我遇到的问题原因)
原因一:前后端name值不一样,或者前端根本没有设置name值;
这里的name值必须设置,且一样;
第一个原因很初级,基本是小白会犯的错。
原因二:form表单没有设置enctype属性;
在提交普通类型时,此属性不需要设置,但是如果有文件类型的内容,则必须要设置该属性enctype="multipart/form-data";
其实在排查这个问题的时候,有一个疑问,就是设置了这个属性的时候,其他类型的值反而传到后台是null,很是奇怪(希望大神指教);
原因三:在提交文件类型时,method必须是post;
无论是前台form的method还是后台servlet的执行方法都需要post和doPost()运行;
原因四:文件内容太大,导致容器溢出,需要去tomcat的conf-server.xml文件中配置;
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" maxPostSize="-1" />
原因五:后台servlet需要MultipartConfig注解;
前面说了,我在刚开始做的时候认为是个小工具,完全不需要搭框架,所以在前面4个原因都排除了的情况下仍然没有解决问题,怪上火的,研究了半天知道是需要添加注解;
这个注解有一些要求就是需要spring的框架,和servlet3.0版本才可以;
查看servlet版本方法:找到tomcat安装包 -lib - servlet-api.jar 版本 拷贝出来 解压 在META-INF -MANIFEST.MF 用notepad++打开
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.3
Created-By: 1.6.0_45-b06 (Sun Microsystems Inc.)
X-Compile-Source-JDK: 1.6
X-Compile-Target-JDK: 1.6
Name: javax/servlet/
Specification-Title: Java API for Servlets
Specification-Version: 3.0
Specification-Vendor: Sun Microsystems, Inc.
Implementation-Title: javax.servlet
Implementation-Version: 3.0.FR
Implementation-Vendor: Apache Software Foundation
添加spring的方法:
需要5个包:
commons-logging-1.2.jar
spring-beans-4.3.7.RELEASE.jar
spring-context-4.3.7.RELEASE.jar
spring-core-4.3.7.RELEASE.jar
spring-expression-4.3.7.RELEASE.jar
添加到web app library下 在web.xml里配置
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 默认配置在WEB-INF目录下 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:/applicationContext.xml</param-value> <!-- <param-value>/WEB-INF/spring*.xml</param-value> --></context-param>
在src下建立applicationContext.xml 内容如下
<?xml version="1.0" encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-3.0.xsd"></beans>
这样就可以正常使用注解啦~
原因六:又来了。。。其他方式获取part
做了与另一个项目的整合,原来的项目只用了spring的一个配置,整合到springMVC时加入MultipartConfig时Controller跳不进去(怪我太菜),但是用原有的方法获取文件 不得不加此注解,但是Controller是首先要跳进去的 ,所以只能放弃注解方式,用原始request方式迂回获取文件(前提是调试模式request是有值的,但是在获取part是null)
所以试试能不能直接在request里取出文件 ,看到有个multipartFiles属性,在调试计算器里试着找,果然找到了
点击完是这个
进行了一个转义,但是好在能取到,所以将原来代码修改,这里就不需要@MultipartConfig注解了
这样就获取到文件啦~
上传pdf文件转图片翻页小工具 遇到JSP form中type=file的文件上传及后台Part处理问题(后台取值为null)