1

ファイルのアップロードを機能させるのに問題があります。localhost では完全に動作しますが、EC2 にデプロイすると、マルチパート コンテンツを受信しません。fields.size() は、ec2 tomcat コンソールでは 0 を返しますが、localhost では 1 を返します。私はTOMCAT 7、ioおよびmysqlを使用したApacheファイルアップロードを使用していますが、これは現在関連していないと思います)。すべてのライブラリは、Tomcat lib フォルダーとWEB-INF/lib

アップロードを処理するサーブレットのコードを次に示します。長くなりすぎて、if(it.hasnext().

    // References: http://docs.oracle.com/javaee/6/tutorial/doc/glrbb.html
protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    int taskid = Integer.parseInt(request.getParameter("id"));
    boolean isMultipartContent = ServletFileUpload
            .isMultipartContent(request);
    if (!isMultipartContent) {
        response.sendRedirect("/automaatnehindaja/taskview.html?id=" + taskid +"&result=incorrect");
        return;
    }
    FileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);

    try {
        List<FileItem> fields = upload.parseRequest(request);
        Iterator<FileItem> it = fields.iterator();
        System.out.println(fields.size());
        }
        if (it.hasNext()) {
            Connection c = null;
            PreparedStatement stmt = null;
            FileItem fileitem = it.next();
            if (!fileitem.getName().endsWith(".py")){
                //TODO other language support
                response.sendRedirect("/automaatnehindaja/taskview.html?id=" + taskid +"&result=incorrect");
                return;
            }
            if (fileitem.getSize()>1024*1024){
                response.sendRedirect("/automaatnehindaja/taskview.html?id=" + taskid +"&result=toolarge");
                return;
            }
            Class.forName("com.mysql.jdbc.Driver");

そして、私がアップロードに使用しているフォームはこちらです

<form id = "uploadform" method="post" enctype="multipart/form-data">
            <input type="file" name = "file">
            <button>Saada hindamisele</button>
        </form>     

他に何か必要な場合は、お知らせください。

編集:私は最も愚かな間違いを犯したことが判明しました。 @MultipartConfig(location = "tmp", fileSizeThreshold = 1024 * 1024, maxFileSize = 1024 * 1024, maxRequestSize = 1024 * 1024 * 2) 私はWindowsで開発しており、ec2にはubuntuがあります。Windows は location = "/tmp" を受け入れますが、もちろん Linux は受け入れません。

4

0 に答える 0