SpringMVCファイルアップロードと複数ファイルアップロードの例
10079 ワード
一、簡単に述べる
Java Webプロジェクトの中で、ファイルアップロード機能はほとんど必要です。プロジェクト開発中にもよく出会っています。以前はあまり手入れしていませんでした。今日は暇があれば、この方面の知識を勉強しました。そこで、私が習ったSpringMVCの中で単一ファイルと複数ファイルをアップロードするという部分の知識をメモしました。
二、ファイルアップロード
1、ページ
ここでは簡単なフォームの提出例として、フォームの提出方法をpostに設定し、enctypeの値を「multiipad/form-data」に設定します。
Controllerの処理方法では、MultiiprtFileオブジェクトをパラメータとして使用して、フロントエンドからアップロードされたファイルを受信します。具体的にはコードコメントを見てください。
MultiiprtFileオブジェクトを使用して、フロントエンドからアップロードされたファイルを受信するには、springmvcの設定ファイルで以下のように構成する必要があります。
三、マルチファイルアップロード
多ファイルアップロードも簡単です。単ファイルアップロードはControllerの処理方法でMultiiprtFileオブジェクトをパラメータ受信の前にアップロードされたファイルとして使用します。多ファイルアップロードはMultiiprtFileオブジェクト配列を使って受信します。
1、ページ
このページにはいくつかのname値のようなfileタイプのinputタグがありますが、他の添付ファイルのアップロードページは悪くありません。
コントローラでの処理方法はMultiiprtFile[]配列を受信パラメータとして使用していますが、直接使用することはできません。校正パラメータが必要です。具体的にはコードコメントを見てください。
四、複数のファイルのアップロード状況は総合的である。
もちろん、プロジェクト开発中、シーンはそんなに简単ではないかもしれません。上记の多ファイルアップロードはすべてファイルを选んでから一绪にアップロードします。またまたは1つのページの中で、1つずつ選択した複数のファイルをアップロードしたり、1回で選択した複数のファイルをアップロードしたりする必要があります。大丈夫です。MultiiprtFile[]を食べて、コードもeasuryです。下から直接コードをつけます。
1、ページ
ここの「一度に複数のファイルを選択したマルチファイルアップロード」は、inputタグにmultiple属性を加えたものです。
五、開拓
1、MultiiprtFile類でよく使われるいくつかの方法: default Engcoding:request要求を解析するためのデフォルトの符号化フォーマットを示し、指定がない場合はServlet仕様に従ってデフォルト値ISO-859-1を使用します。requestが自分でそのコードフォーマットを指定した時、ここで指定したdefault Engcodingを無視します。 uplloadTempDir:ファイルアップロード時の一時ディレクトリを設定し、デフォルトはServlet容器の一時ディレクトリです。 maxUploadSize:アップロードを許可する最大ファイルサイズを設定し、バイト単位で計算します。-1に設定すると無制限となり、デフォルトは-1です。 maxUploadSize PerFile:maxUploadSizeと同じですが、maxUploadSize PerFileはアップロードファイルのサイズを制限します。maxUploadSizeはアップロードファイルのサイズを制限します。 maxInMemorySize:ファイルアップロード時にメモリに書き込まれる最大値を設定し、バイト単位で計算します。デフォルトは10240です。 reolveLazinly:trueの場合、UploadActionでファイルサイズ異常をキャプチャするために、遅延ファイル解析を有効にします。
六、注意開発の過程で、プロファイル中の異常解像器を先に注釈してください。エラーを確認しやすいです。 時にアップロードエラーが発生したのは、私たちが設定ファイルにアップロードファイルのサイズを制限したからです。この制限を加えなくてもいいです。しかし、個人的にはこの制限が一番いいです。 SpringMVCでMultiiprtFileを使用してアップロードファイルを受信するには2つのjarパッケージに依存する必要があります。 以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
Java Webプロジェクトの中で、ファイルアップロード機能はほとんど必要です。プロジェクト開発中にもよく出会っています。以前はあまり手入れしていませんでした。今日は暇があれば、この方面の知識を勉強しました。そこで、私が習ったSpringMVCの中で単一ファイルと複数ファイルをアップロードするという部分の知識をメモしました。
二、ファイルアップロード
1、ページ
ここでは簡単なフォームの提出例として、フォームの提出方法をpostに設定し、enctypeの値を「multiipad/form-data」に設定します。
<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">
<input type="file" name="img"><br />
<input type="submit" name=" ">
</form>
2、コントローラControllerの処理方法では、MultiiprtFileオブジェクトをパラメータとして使用して、フロントエンドからアップロードされたファイルを受信します。具体的にはコードコメントを見てください。
@Controller
@RequestMapping("/test")
public class MyController {
@RequestMapping(value = "/upload.do", method = RequestMethod.POST)
// MultipartFile file input name , MultipartFile , @RequestParam("img")
public String upload(MultipartFile img, HttpSession session)
throws Exception {
// ,MultipartFile null, getSize()
if (img.getSize() > 0) {
// , :/home/tomcat/webapp/ /images
String path = session.getServletContext().getRealPath("images");
// , : .png
String fileName = img.getOriginalFilename();
// , , : jpg png
if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
File file = new File(path, fileName);
img.transferTo(file);
return "/success.jsp";
}
}
return "/error.jsp";
}
}
3、スプリングmvc.xml配置MultiiprtFileオブジェクトを使用して、フロントエンドからアップロードされたファイルを受信するには、springmvcの設定ファイルで以下のように構成する必要があります。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
...
<!-- :CommonsMultipartResolver id , multipartResolver, -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- -->
<property name="defaultEncoding" value="utf-8"/>
<!-- , , 1M(1*1024*1024) -->
<property name="maxUploadSize" value="1048576"/>
<!-- maxUploadSize , maxUploadSizePerFile , maxUploadSize -->
<property name="maxUploadSizePerFile" value="1048576"/>
</bean>
<!-- , -->
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="/error.jsp"/>
</bean>
</beans>
上に配置されたファイルのCommons MultiiprtResolaverのプロパティ値の設定は必須ではなく、すべて書かなくてもいいです。ここに行けば、単一のファイルをアップロードできます。三、マルチファイルアップロード
多ファイルアップロードも簡単です。単ファイルアップロードはControllerの処理方法でMultiiprtFileオブジェクトをパラメータ受信の前にアップロードされたファイルとして使用します。多ファイルアップロードはMultiiprtFileオブジェクト配列を使って受信します。
1、ページ
このページにはいくつかのname値のようなfileタイプのinputタグがありますが、他の添付ファイルのアップロードページは悪くありません。
<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">
file 1 : <input type="file" name="imgs"><br />
file 2 : <input type="file" name="imgs"><br />
file 3 : <input type="file" name="imgs"><br />
<input type="submit" name=" ">
</form>
2、コントローラコントローラでの処理方法はMultiiprtFile[]配列を受信パラメータとして使用していますが、直接使用することはできません。校正パラメータが必要です。具体的にはコードコメントを見てください。
@Controller
@RequestMapping("/test")
public class MyController {
@RequestMapping(value = "/upload.do", method = RequestMethod.POST)
// MultipartFile[] imgs ,imgs file input name, MultipartFile ,
// MultipartFile[] , [Lorg.springframework.web.multipart.MultipartFile;.<init>() ,
// @RequestParam ( MultipartFile ), :@RequestParam("imgs") MultipartFile[] files。
public String upload(@RequestParam MultipartFile[] imgs, HttpSession session)
throws Exception {
for (MultipartFile img : imgs) {
if (img.getSize() > 0) {
String path = session.getServletContext().getRealPath("images");
String fileName = img.getOriginalFilename();
if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
File file = new File(path, fileName);
img.transferTo(file);
}
}
}
return "/success.jsp";
}
}
同様に、MultiiprtFileアレイを使用して、フロントエンドからアップロードされた複数のファイルを受信しても、springmvcのプロファイルを配置する必要があります。具体的な構成は上記のファイルにアップロードされたspringmvc.xmlの構成と同じです。直接コピーすればいいです。これで、複数のファイルをアップロードすることができます。四、複数のファイルのアップロード状況は総合的である。
もちろん、プロジェクト开発中、シーンはそんなに简単ではないかもしれません。上记の多ファイルアップロードはすべてファイルを选んでから一绪にアップロードします。またまたは1つのページの中で、1つずつ選択した複数のファイルをアップロードしたり、1回で選択した複数のファイルをアップロードしたりする必要があります。大丈夫です。MultiiprtFile[]を食べて、コードもeasuryです。下から直接コードをつけます。
1、ページ
ここの「一度に複数のファイルを選択したマルチファイルアップロード」は、inputタグにmultiple属性を加えたものです。
<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">
: <br />
<input type="file" name="imgs1" multiple><br /> <br />
: <br />
<input type="file" name="imgs2"><br />
<input type="file" name="imgs2"><br /><br />
: <br />
<input type="file" name="imgs3"><br /><br />
<input type="submit" name=" ">
</form>
2、コントローラ
@Controller
@RequestMapping("/test")
public class MyController {
@RequestMapping(value = "/upload.do", method = RequestMethod.POST)
public String upload(@RequestParam MultipartFile[] imgs1,@RequestParam MultipartFile[] imgs2,@RequestParam MultipartFile[] imgs3, HttpSession session)
throws Exception {
String path = session.getServletContext().getRealPath("images");
for (MultipartFile img : imgs1) {
uploadFile(path, img);
}
for (MultipartFile img : imgs2) {
uploadFile(path, img);
}
for (MultipartFile img : imgs3) {
uploadFile(path, img);
}
return "/success.jsp";
}
private void uploadFile(String path, MultipartFile img) throws IOException {
if (img.getSize() > 0) {
String fileName = img.getOriginalFilename();
if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
File file = new File(path, fileName);
img.transferTo(file);
}
}
}
}
MultiiprtFile[]はこのように強力で、単一でも論理的に処理されるので、プロジェクト開発においてMultiiprtFile[]をファイルの受信パラメータとして使用することを推奨します。五、開拓
1、MultiiprtFile類でよく使われるいくつかの方法:
String getContentType()// MIME
InputStream getInputStream()//
String getName() //
String getOriginalFilename() //
long getSize() // , byte
boolean isEmpty() //
void transferTo(File dest)
2、Commons MultiiPad Resolaverの属性解析