1

ファイルブラウザとアップロードボタンを表示する.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 を使用しています。

上記のパスにファイルを書き込めない理由がわかりましたか?

どうも、

4

2 に答える 2

0

同様の質問と回答 Apache Common fileupload を使用してアップロードされたファイルのパスを「コンテキスト パス」に設定する方法は?

java.io.File を使用

String relativeWebPath = "/WEB-INF/uploads";
String absoluteFilePath = getServletContext().getRealPath(relativeWebPath);
File uploadedFile = new File(absoluteFilePath, FilenameUtils.getName(item.getName()));
// ...
于 2013-04-16T08:21:39.297 に答える
0

例外を見ると、パスが正しく構成されていないために問題が発生していることがわかります。
だからあなたが使うことができます

File targetFile = new File(targetPath, filename) ;  // target path is hard coded for you.

これにより、パスがより処理されます。

于 2013-04-16T08:25:39.220 に答える