使用SpringMVC接收文件流上傳和表單參數(shù)
接收文件流上傳和表單參數(shù)
在SpringMVC中,接收文件流非常簡單,我們可以寫個(gè)接口用來接收一些文件,同時(shí)還可以接收表單參數(shù)。
代碼參考如下:
JAVA服務(wù)端代碼
/**
* 接收文件流
*
* @param request 請(qǐng)求
* @return OK
*/
@RequestMapping(value = "/receive/file", method = POST)
public String receiveFile(HttpServletRequest request) {
// 轉(zhuǎn)換為 MultipartHttpServletRequest
if (request instanceof MultipartHttpServletRequest) {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// 通過表單中的參數(shù)名來接收文件流(可用 file.getInputStream() 來接收輸入流)
MultipartFile file = multipartRequest.getFile("file");
System.out.println("上傳的文件名稱:" + file.getOriginalFilename());
System.out.println("上傳的文件大小:" + file.getSize());
// 接收其他表單參數(shù)
String name = multipartRequest.getParameter("name");
String content = multipartRequest.getParameter("content");
System.out.println("name:" + name);
System.out.println("content:" + content);
return "OK";
} else {
return "不是 MultipartHttpServletRequest";
}
}
HTML頁面代碼
<form action="http://127.0.0.1:8080/receive/file" method="post" enctype="multipart/form-data"> ? ? <input type="file" name="file" id="file"> ? ? <input type="text" name="content" value="內(nèi)容"> ? ? <input type="text" name="name" value="名稱"> ? ? <button type="submit">提交請(qǐng)求</button> </form>
SpringMVC接收文件上傳,并對(duì)文件做處理
- http client版本4.1.1
- spring版本3.2.11
在這個(gè)例子里面我接收了文件,并轉(zhuǎn)發(fā)給另一個(gè)機(jī)器,其實(shí)接收的時(shí)候文件的流已經(jīng)拿到了,想保存到本地,或者對(duì)文件分析,自己可以斟酌。
springmvc配置
<?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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com"/>
<!-- if you use annotation you must configure following setting -->
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<!-- 處理JSON -->
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
<mvc:default-servlet-handler/>
<!-- 日志輸出攔截器 -->
<mvc:interceptors>
<bean class="com.steward.interceptor.AccessInteceptor">
<property name="accessLog">
<value>true</value>
</property>
</bean>
</mvc:interceptors>
<!-- 解析器 -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="html" value="text/html"/>
<entry key="json" value="application/json"/>
</map>
</property>
<property name="viewResolvers">
<list>
<ref bean="viewResolver"/>
</list>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
</list>
</property>
</bean>
<!-- 異常處理 -->
<bean id="exceptionHandler" class="com.steward.exception.ExceptionHandler"/>
<!-- 文件上傳 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
<!-- 配置freeMarker的模板路徑 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"></property>
<property name="suffix" value=".html"></property>
<property name="contentType" value="text/html;charset=UTF-8"/>
<property name="requestContextAttribute" value="rc"></property>
</bean>
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/templates/"></property>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">0</prop>
<prop key="default_encoding">UTF-8</prop>
<prop key="locale">zh_CN</prop>
<prop key="number_format">0.##########</prop>
<prop key="template_exception_handler">ignore</prop>
</props>
</property>
<property name="freemarkerVariables">
<map>
<entry key="getVersion" value-ref="getVersion"/>
</map>
</property>
</bean>
<bean id="getVersion" class="com.steward.freemarker.GetVersion"/>
</beans>
controller代碼如下
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
@ResponseBody
public String uploadFile(HttpServletRequest request) throws Exception {
FileOutputStream fos = null;
InputStream in = null;
String fileUrl = null;
try {
//將當(dāng)前上下文初始化給 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//檢查form中是否有enctype="multipart/form-data"
if (multipartResolver.isMultipart(request)) {
//將request變成多部分request
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
//獲取multiRequest 中所有的文件名
Iterator iterator = multiRequest.getFileNames();
while (iterator.hasNext()) {
MultipartFile multipartFile = multiRequest.getFile(iterator.next().toString());
in = multipartFile.getInputStream();
File file = new File(multipartFile.getOriginalFilename());
fos = new FileOutputStream(file);
byte[] buff = new byte[1024];
int len = 0;
while ((len = in.read(buff)) > 0) {
fos.write(buff, 0, len);
}
String uploadUrl = platformHttpsDomain + "/uploadFile";
HttpPost post = new HttpPost(uploadUrl);
HttpClient httpclient = new DefaultHttpClient();
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("file", new FileBody(file));
post.setEntity(reqEntity);
HttpResponse response = httpclient.execute(post);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
fileUrl = EntityUtils.toString(response.getEntity());
}
file.deleteOnExit();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
}
}
}
return fileUrl;
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Java代碼實(shí)現(xiàn)游戲服務(wù)器生成全局唯一ID的方法匯總
我們?cè)谧龇?wù)器系統(tǒng)開發(fā)的時(shí)候,為了適應(yīng)數(shù)據(jù)大并發(fā)的請(qǐng)求,需要插入數(shù)據(jù)庫之前生成一個(gè)全局的唯一id,糾結(jié)全局唯一id怎么生成呢?下面小編給大家分享Java代碼實(shí)現(xiàn)游戲服務(wù)器生成全局唯一ID的方法匯總,涉及到優(yōu)劣勢(shì)方面的知識(shí)點(diǎn),對(duì)此感興趣的朋友一起看看吧2016-10-10
Java Socket編程實(shí)例(二)- UDP基本使用
這篇文章主要講解Java Socket編程中UDP的基本使用,希望能給大家做一個(gè)參考。2016-06-06
JDK1.8源碼下載及idea2021導(dǎo)入jdk1.8源碼的詳細(xì)步驟
這篇文章主要介紹了JDK1.8源碼下載及idea2021導(dǎo)入jdk1.8源碼的詳細(xì)步驟,在文章開頭就給大家分享了JDK1.8源碼下載地址和下載步驟,告訴大家idea2021.1.3導(dǎo)入JDK1.8源碼步驟,需要的朋友可以參考下2022-11-11
淺談Spring Boot 開發(fā)REST接口最佳實(shí)踐
這篇文章主要介紹了淺談Spring Boot 開發(fā)REST接口最佳實(shí)踐,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01
Spring?Boot請(qǐng)求處理之常用參數(shù)注解使用教程
這篇文章主要給大家介紹了關(guān)于Spring?Boot請(qǐng)求處理之常用參數(shù)注解使用的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03
java使用Feign實(shí)現(xiàn)聲明式Restful風(fēng)格調(diào)用
這篇文章主要為大家詳細(xì)介紹了java使用Feign實(shí)現(xiàn)聲明式Restful風(fēng)格調(diào)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
解決Java Redis刪除HashMap中的key踩到的坑
這篇文章主要介紹了解決Java Redis刪除HashMap中的key踩到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02

