次のページには2つのフォームがあります。1つは装飾のない単純なアップロードフォームで、もう1つはjquery-uiのライブラリを使用した装飾されたフォームです。通常のフォームの送信ボタンをクリックすると、データは完全に送信されます。つまり、アップロードされたファイルは目的のフォルダーに完全に移動しますが、ボタンをクリックして他のフォームの送信機能をトリガーすると、サーブレットが呼び出されます。ただし、同じパラメータがサーブレットに渡されることはありません。装飾されたフォームを使用して送信すると、サーブレットに何も投稿されないということです。
HTMLコード:
<html>
<head>
<script type="text/javascript" src="./jquery.js"></script>
<link rel="stylesheet" type="text/css" href="jquery-ui.css" />
<script type="text/javascript" src="jquery-ui.js"></script>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div id="open-form">Upload your file</div>
<div id="dialog-form" title="Select your file">
<form id="uploadForm" action="./uploadFile "
enctype="multipart/form-data" method="POST">
<fieldset>
<label for="name"><b>Filepath</b></label> <input type="file"
class="text ui-widget-content ui-corner-all" id="name" />
</fieldset>
</form>
</div>
<form action="./uploadFile" enctype=" multipart/form-data" method="POST">
<div class="box2">
Select your File</br>
<input type="file" name="Uploaded file">
<input type="submit" class="button" value="Upload">
</div>
</form>
<script type="text/javascript">
$(function() {
var name = $("#name"), allFields = $([]).add(name);
$("#dialog-form").dialog({
autoOpen : false,
height : 300,
width : 460,
modal : true,
buttons : {
"Upload" : function() {
document.forms["uploadForm"].submit();
},
Cancel : function() {
$(this).dialog("close");
}
},
close : function() {
allFields.val("").removeClass("ui-state-error");
}
});
$("#open-form").click(function() {
$("#dialog-form").dialog("open");
});
});
</script>
</body>
念のため、タグにjavascriptを追加します。これはサーブレットコードです。
public void doPost(HttpServletRequest req, HttpServletResponse res) {
try {
int formDataLength = req.getContentLength();
byte dataBytes[] = new byte[formDataLength];
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
factory.setRepository(new File("/location/y-folder"));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(10000000);
List fileItems = upload.parseRequest(req);
Iterator i = fileItems.iterator();
FileItem fi = ((FileItem) i.next());
InputStream inputStream = fi.getInputStream();
String path = fi.getName();
long h = fi.getSize();
File f = new File("/location/x-folder"+path);
OutputStream out = new FileOutputStream(f);
int len;
while ((len = inputStream.read(dataBytes)) > 0) {
out.write(dataBytes, 0, len);
}
out.close();
inputStream.close();
System.out.println("Fi:-" + fi.toString());
}catch(Exception e){
system.out.println(e);
}