[html、jsp、java]ファイルのアップロード
31433 ワード
こんにちは.😀. 今日、jspの組み込みオブジェクトにファイルを送信し、画面に出力する方法を説明します.
JSPに組み込まれているオブジェクトは次のとおりです.
オブジェクトjavaxはrequestjavaxを説明します.servlet.http.HttpServletRequest, javax.servlet.サーブレットRequest Webブラウザの要求情報を格納するオブジェクトresponsejavax.servlet.http.HttpServletResponse, javax.servlet.サーブレットResponseは、Webブラウザが応答情報を要求するオブジェクトoutjavaxを格納します.servlet.jsp.出力ストリームオブジェクトsessionjavaxは、JspWriterJSPページで出力する内容を含む.servlet.http.サーブレットContextは、1つのWebブラウザでメンテナンスするオブジェクトアプリケーションjavaxのセッション情報を保存します.servlet.ServiceletContext WebアプリケーションにContext情報を含むオブジェクトpageContextjavax.servlet.jsp.PageContextJSPページ情報を格納するオブジェクトPagejava.lang.ObjectJSPページのJavaクラスオブジェクトconfigjavaxを実装します.servlet.サーブレットコンフィグJSPページ設定情報を含むオブジェクトExceptionjava.lang.ThrowableJSPページで異常が発生した場合に使用するオブジェクト
enctype
サンプルファイルの送信コンテキストは、現在のコンテキスト(Webプロジェクト名またはWebアプリケーションまたはドメインまたはプロジェクト)の名前です. 画面
🤔 .JSPはどのようにファイルを受信しますか?
pageContext.getServletContext().getRealPath("path");
Servlet 3.1 - Apache Tomcat 8.0.53からjavaxへ.servlet.サーブレットコンフィグインタフェースクラスにはgetServiceletContext()関数が含まれます.
✔ Method Summary
✔ Method Summary
new File(saveDirectory)
new MultipartRequest(parameters)
🤔 なぜFilenRenamePolicyポリシーの場所に他のクラスのジェネレータを入力しますか?
servlets.comのAPIでは、FileRenamePolicyはインタフェースクラスであり、このクラスを継承するクラスはDefaultFileRenamePolicyである.このインタフェースクラスの継承クラスインスタンスからジェネレータが生成されます.
ex) velog.jpg, velog1.jsp, velog2.jsp....
String name=mr.getParameter("name");
com.oreilly.servlet.MultipartRequestクラスの参照変数で、パラメータの名前をString nameとして保存します.
画面に入力した値は、名前1に保存されます.注意:request.getParameterとは違います. Enumeration files=mr.getFileNames();
String file1=String.valueOf(files.nextElement());
filename1=mr.getFilesystemName(file1);
すべての画像がアップロードされていることを確認したら、画像パスを位置決めして出力できます.
入力値
結果値
✔saveDirectoryビューの注意点
最もエラーが発生しやすいのは、ワークスペース内のsrcまたはWebContentに実際の画像が存在するパスだと思いますが、実際にはそうではありません.
たとえば、
JSP内蔵オブジェクト
JSPに組み込まれているオブジェクトは次のとおりです.
オブジェクトjavaxはrequestjavaxを説明します.servlet.http.HttpServletRequest, javax.servlet.サーブレットRequest Webブラウザの要求情報を格納するオブジェクトresponsejavax.servlet.http.HttpServletResponse, javax.servlet.サーブレットResponseは、Webブラウザが応答情報を要求するオブジェクトoutjavaxを格納します.servlet.jsp.出力ストリームオブジェクトsessionjavaxは、JspWriterJSPページで出力する内容を含む.servlet.http.サーブレットContextは、1つのWebブラウザでメンテナンスするオブジェクトアプリケーションjavaxのセッション情報を保存します.servlet.ServiceletContext WebアプリケーションにContext情報を含むオブジェクトpageContextjavax.servlet.jsp.PageContextJSPページ情報を格納するオブジェクトPagejava.lang.ObjectJSPページのJavaクラスオブジェクトconfigjavaxを実装します.servlet.サーブレットコンフィグJSPページ設定情報を含むオブジェクトExceptionjava.lang.ThrowableJSPページで異常が発生した場合に使用するオブジェクト
enctype : multipart/form-data
enctype
application/x-www-form-urlencoded
&으로 분리되고, "=" 기호로 값과 키를 연결하는 key-value tuple로 인코딩되는 값입니다.
영어 알파벳이 아닌 문자들은 percent encoded 으로 인코딩됩니다.
content type은 바이너리 데이터에 사용하기에는 적절치 않습니다.
multipart/form-data
파일이나 이미지를 서버로 전송할 때 주로 사용
text/plain
공백 문자(space)는 “+” 기호로 변환,
나머지 문자는 모두 인코딩되지 않음
ファイルをjspに送信するとPOST方式で送信し、enctypeはmultipart/form-data方式で送信する.サンプルファイルの送信
<h3>FILE UPLOAD</h3>
<hr>
<form name="fileUploadForm"
action="/Context/velog/velog_file.jsp"
method="POST"
enctype="multipart/form-data">
이름1 : <input type="text" name="name"><br>
파일1 : <input type="file" name="fileName1"><br>
파일2 : <input type="file" name="fileName2"><br>
<input type="submit" value="전송">
</form>
🤔 .JSPはどのようにファイルを受信しますか?
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.oreilly.servlet.MultipartRequest" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
<%@ page import="java.io.File" %>
<%@ page import="java.util.Enumeration" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<%
String saveDirectory=pageContext.getServletContext().getRealPath("/upload/aaaa/");
out.println("saveDirectory >>> : "+saveDirectory+"<br>");
File saveDir=new File(saveDirectory);
if(!saveDir.exists()){
saveDir.mkdirs();
}
int maxPostsize=1024*1024*5;
String encoding="UTF-8";
String filename1="";
String filename2="";
try{
MultipartRequest mr=new MultipartRequest(request,
saveDirectory, maxPostsize, encoding, new DefaultFileRenamePolicy());
out.println("mr 참조변수 가지고 서버에 업로드된 파일 정보. <br>");
// name
String name=mr.getParameter("name");
out.println("name >>> : "+name+"<br>");
// file
Enumeration<String> files=mr.getFileNames();
String file1=String.valueOf(files.nextElement());
filename1=mr.getFilesystemName(file1);
out.println("filename1 >>> : "+filename1+"<br>");
String file2=String.valueOf(files.nextElement());
filename2=mr.getFilesystemName(file2);
out.println("filename2 >>> : "+filename2+"<br>");
}catch(Exception e){
System.out.println("에러가 >>> : "+e.getMessage());
}
%>
<h3>File Upload Testing</h3>
<hr>
<table border="1">
<tr align="center">
<td><%= filename1 %></td>
<td><img src="/Context/upload/aaaa/<%= filename1 %>"></td>
</tr>
<tr>
<td><%= filename2 %></td>
<td><img src="/Context/upload/aaaa/<%= filename2 %>"></td>
</tr>
</table>
<body>
</body>
</html>
コードプール付きJSPでファイルを出力する
pageContext.getServletContext().getRealPath("path");
Servlet 3.1 - Apache Tomcat 8.0.53からjavaxへ.servlet.サーブレットコンフィグインタフェースクラスにはgetServiceletContext()関数が含まれます.
✔ Method Summary
Modifier and Type | Method and Description
ServletContext | getServletContext()
Returns: Returns a reference to the ServletContext in which the caller is executing.
また、getRealPath(「path」)についてjavax.servlet.サーブレットContextインタフェースクラスにはgetRealPath(java.lang.Stringpath)が含まれています.✔ Method Summary
Modifier and Type | Method and Description
java.lang.String | getRealPath(java.lang.String path)
Returns: Returns a String containing the real path for a given virtual path. For example, the path "/index.html" returns the absolute file path on the server's filesystem would be served by a request for "http://host/contextPath/index.html", where contextPath is the context path of this ServletContext..
これらの関数を使用して、サーブレットContextのobjectに戻り、指定した仮想パスを実際のパスに貼り付け、saveDirectory変数をStringデータ型に入れます.new File(saveDirectory)
File(String pathname)
Creates a new File instance by converting the given pathname
string into an abstract pathname.
指定したパスを使用して新しいファイルを作成します.new MultipartRequest(parameters)
MultipartRequest(javax.servlet.http.HttpServletRequest request, java.lang.String saveDirectory, int maxPostSize, java.lang.String encoding, FileRenamePolicy policy)
Constructs a new MultipartRequest to handle the specified request, saving any uploaded files to the given directory, and limiting the upload size to the specified length.
各パラメータをパラメータに代入し、ファイルを指定したパスにアップロードします.🤔 なぜFilenRenamePolicyポリシーの場所に他のクラスのジェネレータを入力しますか?
servlets.comのAPIでは、FileRenamePolicyはインタフェースクラスであり、このクラスを継承するクラスはDefaultFileRenamePolicyである.このインタフェースクラスの継承クラスインスタンスからジェネレータが生成されます.
com.oreilly.servlet.multipart
Class DefaultFileRenamePolicy
public class DefaultFileRenamePolicy
extends java.lang.Object
implements FileRenamePolicy
Implements a renaming policy that adds increasing integers to the body of any file that collides. For example, if foo.gif is being uploaded and a file by the same name already exists, this logic will rename the upload foo1.gif. A second upload by the same name would be foo2.gif. Note that for safety the rename() method creates a zero-len
インスタンスがクラスに属している場合は、同じファイルを保存すると、後で数値が追加されます.ex) velog.jpg, velog1.jsp, velog2.jsp....
String name=mr.getParameter("name");
com.oreilly.servlet.MultipartRequestクラスの参照変数で、パラメータの名前をString nameとして保存します.
画面に入力した値は、名前1に保存されます.
getFileNames
public java.util.Enumeration getFileNames()
Returns the names of all the uploaded files as an Enumeration of Strings. It returns an empty Enumeration if there are no file input fields on the form. Any file input field that's left empty will result in a FilePart with null contents. Each file name is the name specified by the form, not by the user.
Returns:
the names of all the uploaded files as an Enumeration of Strings.
アップロードされたファイルの名前をクライアントインタフェースクラスに含めます.String file1=String.valueOf(files.nextElement());
java.util.Enumeration<E>
files.nextElement()
Returns the next element of this enumeration
if this enumeration object has at least one more element to provide.
Returns:
the next element of this enumeration.
java.lang.String
String : valueOf(Object obj)
Returns:
the next element of this enumeration.
次に、Enumerationインタフェースクラスでファイル名を検索し、file 1と名前を付けます.filename1=mr.getFilesystemName(file1);
java.lang.String :
getFilesystemName(java.lang.String name)
Returns the filesystem name of the specified file,
or null if the file was not included in the upload.
filename 1に正常に出力された場合、ファイルは正常にアップロードされたと考えられます.すべての画像がアップロードされていることを確認したら、画像パスを位置決めして出力できます.
入力値と結果値のチェック
入力値
結果値
✔saveDirectoryビューの注意点
String saveDirectory=pageContext.getServletContext().getRealPath("/upload/aaaa/");
次のコードでは、クリップのパスは実際の画像の保存パスとは異なります.最もエラーが発生しやすいのは、ワークスペース内のsrcまたはWebContentに実際の画像が存在するパスだと思いますが、実際にはそうではありません.
たとえば、
C:\..workspace..\Context\WebContent\image\img_kakao\
パス内の画像が転送された場合、実際にアップロードされたパスは次のようになります.saveDirectory >>> : C:\..workspace..\Context\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Context\upload\aaaa\
これで、[html、jsp、java]ファイルをアップロードするタスクを完了します.Reference
この問題について([html、jsp、java]ファイルのアップロード), 我々は、より多くの情報をここで見つけました https://velog.io/@yunyoseob/html-jsp-java-파일-업로드テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol