ファイルブラウザとアップロードボタンを表示する.jspページと、ファイルをサーバーにアップロードするサーブレットがあります。問題は、ファイルが一時フォルダーにアップロードされていることですが、サーバー上の特定のパスにアップロードする必要がありますが、パスが認識されません。
UploadServlet: doPost メソッド
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
// get access to file that is uploaded from client
Part p1 = request.getPart("file");
InputStream is = p1.getInputStream();
String filename = getFilename(p1);
// get temporary path - this works but it saves on a tmp folder...
//String outputfile = this.getServletContext().getRealPath(filename); // get path on the server
//hardcoded path on which I have to save my file
String outputfile = "http://localhost:8080/Tutorial2/Upload/" + filename;
FileOutputStream os = new FileOutputStream (outputfile);
// write bytes taken from uploaded file to target file
int ch = is.read();
while (ch != -1) {
os.write(ch);
ch = is.read();
}
os.close();
out.println("<h3>File uploaded successfully!</h3>");
}
catch(Exception ex) {
out.println("Exception -->" + ex.getMessage());
}
finally {
out.close();
}
}
private static String getFilename(Part part) {
for (String cd : part.getHeader("content-disposition").split(";")) {
if (cd.trim().startsWith("filename")) {
String filename = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
return filename.substring(filename.lastIndexOf('/') + 1).substring(filename.lastIndexOf('\\') + 1); // MSIE fix.
}
}
return null;
}
.jsp ページ
<form action="UploadServlet" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>Select File : </td>
<td><input name="file" type="file"/> </td>
</tr>
</table>
<p/>
<input type="submit" value="Upload File"/>
</form>
この問題に関する多くの投稿を見てきましたが、どちらも役に立ちませんでした。サーブレットを実行するとFileOutputStream os = new FileOutputStream (outputfile);
-で例外が発生しException -->http:\localhost:8080\Tutorial2\Upload\SvnBridge.exe (The filename, directory name, or volume label syntax is incorrect)
ます。これを検索しましたが、関連するものは見つかりませんでした。役立つかどうかはわかりませんが、Servlet 3.0 と Apache Tomcat v7 を使用しています。
上記のパスにファイルを書き込めない理由がわかりましたか?
どうも、