springmvc+ajax上传图片的问题。传过去的是空值.怎么接收图片??

springmvc+ajax上传图片的问题。传过去的是空值.怎么接收图片??,第1张

因为SpringMVC只有GET请求才能通过方法上加参数获取到值,POST是不能通过这种方式获取的,可以通过request.getParameter(key) 或者 封装成对象(属性对应前端参数)会自动填充。

另外我记得Ajax上传文件不能直接用$.ajax这种方式传,我的方法如下:

var form = new FormData()

var xhr = new XMLHttpRequest()

xhr.open("post", "url", true)

xhr.onload = function () {

alert("上传完成!")

}

xhr.send(form)

可以使用组件上传JspSmartUpload.这是一个类.

<form name="f1" id="f1" action="/demo/servlet/UploadServlet" method="post" enctype="multipart/form-data">

<table border="0">

<tr>

<td>用户名:</td>

<td><input type="text" name="username" id="username"></td>

</tr>

<tr>

<td>密码:</td>

<td><input type="password" name="password" id="password"></td>

</tr>

<tr>

<td>相片:</td>

<td><input type="file" name="pic" id="pic"></td>

</tr>

<tr>

<td>相片:</td>

<td><input type="file" name="pic2" id="pic2"></td>

</tr>

<tr>

<td colspan="2" align="center"><input type="submit"></td>

</tr>

</table>

</form>

这里直接通过表单提交给servlet访问,spring中的话需要配置(一般就不用servlet了,自行配置).

以上在JSp页面中,以下是servlet/action中的代码,由于采用了spring框架,怎么做你知道的(没有servlet但是有action).

package com.demo.servlet

import java.io.IOException

import java.text.SimpleDateFormat

import java.util.Date

import java.util.Random

import java.util.UUID

import javax.servlet.ServletException

import javax.servlet.http.HttpServlet

import javax.servlet.http.HttpServletRequest

import javax.servlet.http.HttpServletResponse

import com.jspsmart.upload.File

import com.jspsmart.upload.Files

import com.jspsmart.upload.Request

import com.jspsmart.upload.SmartUpload

public class UploadServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

SmartUpload su = new SmartUpload()

//初始化

su.initialize(this.getServletConfig(), request, response)

try {

//限制格式

//只允许哪几种格式

su.setAllowedFilesList("jpg,JPG,png,PNG,bmp,gif,GIF")

//不允许哪几种格式上传,不允许exe,bat及无扩展名的文件类型

//su.setDeniedFilesList("exe,bat,,")

//限制大小,每个上传的文件大小都不能大于100K

su.setMaxFileSize(100*1024)

//上传文件的总大小不能超过100K

//su.setTotalMaxFileSize(100*1024)

//上传

su.upload()

//唯一文件名

//得到文件集合

Files files = su.getFiles()

for(int i=0i<files.getCount()i++)

{

//获得每一个上传文件

File file = files.getFile(i)

//判断客户是否选择了文件

if(file.isMissing())

{

continue

}

//唯一名字

Random rand = new Random()

//String fileName = System.currentTimeMillis()+""+rand.nextInt(100000)+"."+file.getFileExt()

String fileName = UUID.randomUUID()+"."+file.getFileExt()

//以当前日期作为文件夹

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")

String dirPath = sdf.format(new Date())

//获得物理路径

String realDirPath= this.getServletContext().getRealPath(dirPath)

java.io.File dirFile = new java.io.File(realDirPath)

//判断是否存在

if(!dirFile.exists())

{

//创建文件夹

dirFile.mkdir()

}

//保存

file.saveAs("/"+dirPath+"/"+fileName)

//file.saveAs("/uploadFiles/"+fileName)

}

//原名保存

//su.save("/uploadFiles")

} catch (Exception e) {

System.out.println("格式错误")

}

//获得用户名

Request req = su.getRequest()

String username = req.getParameter("username")

System.out.println(username)

}

/**

* The doPost method of the servlet. <br>

*

* This method is called when a form has its tag value method equals to post.

*

* @param request the request send by the client to the server

* @param response the response send by the server to the client

* @throws ServletException if an error occurred

* @throws IOException if an error occurred

*/

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

this.doGet(request, response)

}

}

特别注意导的包是JspSmartUpload中的还是java.io.*中的.

再次说明,这段代码是servlet中的,spring中的action可以剪切以上的一部分.请自行调整.

实现上传图片功能在Springmvc中很好实现。下面将会展现完整例子。

开始需要在pom.xml加入几个jar,分别是:

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>1.3.1</version>

</dependency>

<dependency>

<groupId>commons-io</groupId>

<artifactId>commons-io</artifactId>

<version>2.4</version>

</dependency>

接下来,在Springmvc的配置加入上传文件的配置(PS:我把springmvc的完整配置都展现出来):

<!--默认的mvc注解映射的支持 -->

<mvc:annotation-driven/>

<!-- 处理对静态资源的请求 -->

<mvc:resources location="/static/" mapping="/static/**" />

<!-- 扫描注解 -->

<context:component-scan base-package="com.ztz.springmvc.controller"/>

<!-- 视图解析器 -->

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>

<!-- 前缀 -->

<property name="prefix" value="/WEB-INF/jsp/"/>

<!-- 后缀 -->

<property name="suffix" value=".jsp"/>

</bean>

<!-- 上传文件 -->

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<property name="defaultEncoding" value="utf-8"/>

<!-- 最大内存大小 -->

<property name="maxInMemorySize" value="10240"/>

<!-- 最大文件大小,-1为不限制大小 -->

<property name="maxUploadSize" value="-1"/>

</bean>


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/11742893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存