jspで簡単な画像アップロード機能を実現
1まず1つのページを作って、アップロードするピクチャーを選択します
注意enctype=「multipart/form-data」符号化でコミットする
2転送されたservletで転送された内容を読み取り、画像の情報を切り取り、ファイルを作成し、情報を保存し、画像のアップロードを実現した.
3 xmlのservletを構成し、もちろんservlet構成を構築することができます.
4実行プログラムを配置して、あなたの配置ディレクトリの下のlocalhostの下でuploadの中であなたのアップロードした画像を見ることができます.
フォームのenctype=「multipart/form-data」とは、アプリケーション/x-www-form-urlencodedであるフォームのMIME符号化のデフォルトを設定することを意味し、request.getParameterはフォームの内容を取得しますが、ファイルのアップロードにはバイナリのデータを受け入れる必要がありますmultipart/form-dataを使用してファイルデータを完全に転送する必要があります.以下の操作でこの設定を使用すると、getParameterで直接テキストの内容を取得するのではなく、1バイト配列でコンテンツを受信し、Stringタイプに変換します.
<body>
<form action="uploadServlet" enctype="multipart/form-data" method="POST" >
selectimage: <input type="file" name="myfile"/><br>
<input type="submit" value="upload"/>
</form>
</body>
注意enctype=「multipart/form-data」符号化でコミットする
2転送されたservletで転送された内容を読み取り、画像の情報を切り取り、ファイルを作成し、情報を保存し、画像のアップロードを実現した.
package com.zhou.action;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UploadServlet extends HttpServlet {
public UploadServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String contentType=request.getContentType();
String servername=request.getServerName();
String realpath=request.getRealPath(servername);
System.out.println(contentType);
InputStream in=null;
OutputStream out=null;
if(contentType.indexOf("multipart/form-data")>=0){
in=request.getInputStream();
int formlength=request.getContentLength();
byte[] formcontent=new byte[formlength];
int totalread=0;
int nowread=0;
while(totalread<formlength){
nowread=in.read(formcontent,totalread, formlength);
totalread+=nowread;
}
String strcontent=new String(formcontent);
System.out.println(strcontent);
int typestart=strcontent.indexOf("Content-Type:")+14;
int typeend=strcontent.indexOf("
", typestart)-1;
String formType=strcontent.substring(typestart, typeend);
if(formType.equals("image/jpeg")||formType.equals("image/gif")||formType.equals("image/pjepg")){
int filenamestart=strcontent.indexOf("filename=\"")+10;
int filenameend=strcontent.indexOf("
",filenamestart)-2;
String filename=strcontent.substring(filenamestart, filenameend);
filename=filename.substring(filename.lastIndexOf("."));
String newfilename=""+(new Date()).getDate()+(new Date()).getHours()+(new Date()).getMinutes()+(new Date()).getSeconds();
newfilename=newfilename+filename;
realpath=realpath+"";
newfilename=realpath+newfilename;
int filestart=strcontent.indexOf("
",typestart)+1;
filestart=strcontent.indexOf("
",filestart)+1;
int intboundary=contentType.indexOf("boundary=")+10;
String strboundary=contentType.substring(intboundary);
int fileend=strcontent.indexOf(strboundary,filestart)-4;
String saveFile=strcontent.substring(filestart,fileend);
int contentstart=strcontent.substring(0,filestart).getBytes().length;
int contentend=strcontent.substring(0, fileend).getBytes().length;
System.out.println(saveFile);
File myfile=new File(realpath);
if(!myfile.exists()){
myfile.mkdirs();
}
out=new FileOutputStream(newfilename);
out.write(formcontent, contentstart, contentend-contentstart);
response.sendRedirect("show.jsp");
}else{
response.sendRedirect("error.jsp");
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
public void init() throws ServletException {
// Put your code here
}
}
3 xmlのservletを構成し、もちろんservlet構成を構築することができます.
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>uploadServlet</servlet-name>
<servlet-class>com.zhou.action.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>uploadServlet</servlet-name>
<url-pattern>/uploadServlet</url-pattern>
</servlet-mapping>
4実行プログラムを配置して、あなたの配置ディレクトリの下のlocalhostの下でuploadの中であなたのアップロードした画像を見ることができます.
フォームのenctype=「multipart/form-data」とは、アプリケーション/x-www-form-urlencodedであるフォームのMIME符号化のデフォルトを設定することを意味し、request.getParameterはフォームの内容を取得しますが、ファイルのアップロードにはバイナリのデータを受け入れる必要がありますmultipart/form-dataを使用してファイルデータを完全に転送する必要があります.以下の操作でこの設定を使用すると、getParameterで直接テキストの内容を取得するのではなく、1バイト配列でコンテンツを受信し、Stringタイプに変換します.