2

dojox.form.Uploaderサーブレットを使用して選択したファイルを投稿する適切な方法を探していましたが、投稿できませんでした。例/デモ/チュートリアルの多くも、道場の適切なドキュメントもないようです。応答は非常に感謝されます。

JSPの私のコードは

<tr>
    <td colspan="9"><h2>File Upload<br /></h2><h3>To add 800#s using a file</h3></td>
</tr>
<tr>
    <td colspan="9"><input type="file" data-dojo-type="dojox.form.Uploader" label ="Browse" multiple="false" id="uploader" onchange="check();" uploadOnSelect="true" url="/MyProject/app/ActionRequestHandlerServlet"/>
        <div id="files" data-dojo-type="dojox.form.uploader.FileList" uploaderId="uploader" ></div>
    </td>
</tr>`

Javascriptコードには以下が含まれます

function check() {
    alert(dijit.byId("uploader").value);
    formPostObject.file = dijit.byId("uploader").value;
    sendFile();
}

function sendFile() {
    dojo.io.iframe.send({
        url: "/MyProject/app/ActionRequestHandlerServlet", // Replace with yours
        method: "post",
        handleAs: "text",
        form: dojo.byId("uploader"),
        load: function(response, ioArgs) {
            console.log("Upload OK", response, ioArgs);
            return response;
        },
        error: function(response, ioArgs) {
            console.log("Upload FAILED!!!", response, ioArgs);
            return response;
        }
    });
}

上記のコードは私に何の応答も与えません。私のサーブレットの sysout ステートメントも prited されていません。これにより、dojo.js で JS エラーが発生します -> 'length' が null であるか、オブジェクトではありません。コードのどこにも長さを使用していません。これで私を助けてください。よろしくお願いします。

4

1 に答える 1

3

これは、dojo 1.6 を使用して私にとってうまくいったことですが、1.7 でも違いはないはずです。重要なのは、enctype="multipart/form-data" が実際に動作するには Servlet 3.0 が必要であるということです。また、サーブレット @MultipartConfig に追加する必要がある注釈があります

--- HTML --

dojo.require("dojox.form.Uploader");
dojo.require("dojox.form.uploader.FileList");
dojo.require("dojox.embed.Flash");
if(dojox.embed.Flash.available){
  dojo.require("dojox.form.uploader.plugins.Flash");
}else{
  dojo.require("dojox.form.uploader.plugins.IFrame");
}
</script>

<body>
<form method="post" action="ReadInputFilesServlet" id="myForm"
               enctype="multipart/form-data" >
 <fieldset>
    <input name="uploadedfile" multiple="true" type="file" id="uploader"
      dojoType="dojox.form.Uploader" label="Select Some Files" >
       <input type="submit" label="Submit" dojoType="dijit.form.Button" />
    <div id="files" dojoType="dojox.form.uploader.FileList"
                    uploaderId="uploader"></div>
 </fieldset>
</form>

--- サーブレット内 --

@MultipartConfig(location="C:\\TMP_FILES", fileSizeThreshold=1024*1024, maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub

        Collection <Part> files = request.getParts();
        Iterator <Part> iter = files.iterator();
        while(iter.hasNext()){
            Part part = iter.next();

            String filename = getFileName(part);

            System.out.println("File "+ filename);

            BufferedReader rd = new BufferedReader(new              InputStreamReader(part.getInputStream()));
            String line;
            while ((line = rd.readLine()) != null) {
            System.out.println(line);
            }
            rd.close();
        }

    }

public static String getFileName(Part filePart)
{
    String header = filePart.getHeader("content-disposition");
    for(String headerPart : header.split(";"))
    {
        if(headerPart.trim().startsWith("filename"))
        {
            return headerPart.substring(headerPart.indexOf('=') + 1).trim()
                             .replace("\"", "");
        }
    }
    return null;
}
于 2013-11-28T20:03:10.447 に答える