ストリーミング API に関するコモンズ ファイル アップロード サイトで提供されている例に従っています。アップロードされたファイルのファイル拡張子を取得する方法、ファイルをディレクトリに書き込む方法を理解しようとして立ち往生しています。最悪の部分は、例を書いた人がコメントする場所// Process the input stream...
です。方法がわからないのは私だけです。
質問する
40001 次
5 に答える
9
HTMLファイルでこれを使用します。
<form action="UploadController" enctype="multipart/form-data" method="post">
<input type="file">
</form>
UploadController
サーブレットのメソッド内doPost
:
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator iterator = items.iterator();
while (iterator.hasNext()) {
FileItem item = (FileItem) iterator.next();
if (!item.isFormField()) {
String fileName = item.getName();
String root = getServletContext().getRealPath("/");
File path = new File(root + "/uploads");
if (!path.exists()) {
boolean status = path.mkdirs();
}
File uploadedFile = new File(path + "/" + fileName);
System.out.println(uploadedFile.getAbsolutePath());
item.write(uploadedFile);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
于 2013-03-15T12:46:17.370 に答える
5
これは、あなたがやりたいことをするサーブレットです。
package rick;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.util.*;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.annotation.WebServlet;
@WebServlet("/upload4")
public class UploadServlet4 extends HttpServlet{
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.print("Request content length is " + request.getContentLength() + "<br/>");
out.print("Request content type is " + request.getHeader("Content-Type") + "<br/>");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
ServletFileUpload upload = new ServletFileUpload();
try{
FileItemIterator iter = upload.getItemIterator(request);
FileItemStream item = null;
String name = "";
InputStream stream = null;
while (iter.hasNext()){
item = iter.next();
name = item.getFieldName();
stream = item.openStream();
if(item.isFormField()){out.write("Form field " + name + ": "
+ Streams.asString(stream) + "<br/>");}
else {
name = item.getName();
System.out.println("name==" + name);
if(name != null && !"".equals(name)){
String fileName = new File(item.getName()).getName();
out.write("Client file: " + item.getName() + " <br/>with file name "
+ fileName + " was uploaded.<br/>");
File file = new File(getServletContext().getRealPath("/" + fileName));
FileOutputStream fos = new FileOutputStream(file);
long fileSize = Streams.copy(stream, fos, true);
out.write("Size was " + fileSize + " bytes <br/>");
out.write("File Path is " + file.getPath() + "<br/>");
}
}
}
} catch(FileUploadException fue) {out.write("fue!!!!!!!!!");}
}
}
}
于 2013-03-15T15:54:46.223 に答える
0
ここでhttp://www.javamonamour.org/2015/10/web-application-for-file-upload-with.htmlに完全な動作例を示しました (WebLogic の Eclipse プロジェクトですが、Tomcat に簡単に適応させることができます) )。
それ以外の場合は、単に git clone https://github.com/vernetto/WebFileUploaderStreaming . 完全に機能する例は、1,000 のコード スニペットよりも優れています。
于 2015-10-10T18:20:52.497 に答える
0
これを行うための素晴らしい「ライブラリ」があります。実際には、マルチパート タイプのフォーム ポストをインターセプトし、通常のサーブレット ポスト メソッドで処理できるファイル、ファイル名などへのアクセスを提供するフィルタのコード サンプルにすぎません。
于 2013-03-15T17:01:36.260 に答える