Wie die download-Datei von httpServlet mit Jquery?

In meiner Anwendung, ein json-Objekt erstellt wird auf der client-Seite. Dieses Objekt wird veröffentlicht HttpServlet erstellt eine pdf-Datei basierend auf der POST-Daten.

Die Datei schicken Sie zurück an den Benutzer. Der Erfolg Funktion aufgerufen wird, und stream-Daten wird protokolliert. Ich möchte jedoch, dass die Datei heruntergeladen wird.

Wie Sie diese erreichen?

Meine clientseitiger code:

$(document).ready(function() {
//when the print button is clicked
$('#exportButton').click(function() {

    var tableIdx = performanceDetailTableController.getTableIdx();

    var allData = {
        "shipTable1":{
            "rows":[
                {  "latitude":"12323","longitude":"213213"},
                {  "latitude":"213213","longitude":"543543"}
            ]},
        "shipTable2":{
            "rows":[
                {  "latitude":"12323", "longitude":"213213"},
                {  "latitude":"213213","longitude":"543543"}
            ]}
        }

    var postData = JSON.stringify(allData);

    $.ajax({
        type : "POST",
        url : 'pdfServlet',
        contentType: "application/json; charset=utf-8",
        data : postData,
                    async : false,
        success : function(data) {
            alert("got some data");
            console.log(data);
        },
    });
});

});

Und das servlet erstellen der Datei:

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

    //get the json content
    StringBuffer jsonContent = getPostedContent(request);

    log.info(jsonContent.toString());

    //convert json to pojo's
    Tables tables = getTablesFromString(jsonContent);

    //create a xml stream
    ByteArrayOutputStream xml = new XmlConverter().getXMLSource(tables);

    //put the xml on the request
    request = setXmlOnRequest(request, xml);

    //create pdf data of the pdf-able xml content
    ByteArrayOutputStream pdf = new PdfHandler().createPdfDataStream(request);

    //response = createResponseheaders(response, request);
    response.setContentType("application/pdf");
    response.setContentLength(pdf.size());
    response.setHeader("Content-disposition", "attachment; filename=test.pdf");
    response.setCharacterEncoding("utf-8");
    response.getOutputStream().write(pdf.toByteArray());

    //close the streams
    pdf.close();
    response.getOutputStream().close();
}

Die Ausgabe im log:

%PDF-1.4
%
4 0 obj
<<
/Producer (Apache FOP Version SVN branches/fop-0_95)
/CreationDate (D:20130725162007+02'00')
>>
endobj
5 0 obj
<<
  /N 3
  /Length 11 0 R
  /Filter /FlateDecode
>>
stream
xwTSϽ7PhRHH.*1  J 

*MEINE LÖSUNG: *

sehen http://www.particletree.com/notebook/ajax-file-download-or-not/ für einen Zeiger

Erstellte ich ein Formular mit einem versteckten Feld:

        <button id="exportButton">export</button>
    <form id="exportForm" method="post" action="pdfServlet">
        <input type="hidden" value="empty" id="pdf_data" name="pdf_data" />
    </form>

als ich änderte meine jquery-post-Daten controller:

    $('#exportButton').click(function() {

    var tableIdx = performanceDetailTableController.getTableIdx();

        var allData = {
        "shipTable1":{
            "rows":[
                {  "latitude":"12323","longitude":"213213"},
                {  "latitude":"213213","longitude":"543543"}
            ]},
        "shipTable2":{
            "rows":[
                {  "latitude":"12323", "longitude":"213213"},
                {  "latitude":"213213","longitude":"543543"}
            ]}
        } 



    var postData = JSON.stringify(allData);

    //put the data on the hidden form field in the export form
    $('#pdf_data').val(postData);

    //and submit the form
    $('#exportForm').submit();

});

so, jetzt, wenn ich auf die Schaltfläche "exportieren", das versteckte Feld in die form bekommt, die Daten zu veröffentlichen, und die Daten werden geschrieben als www-form codiert ist.

Diese Weise das servlet kann die Anforderung Bearbeiten und die Datei wird auf den client heruntergeladen.

  • Sie können nicht zwingen, eine Datei herunterzuladen mit ajax.
  • Ajax-Antworten sind nicht zulässig, um Dateien herunterzuladen .
InformationsquelleAutor jorrebor | 2013-07-25
Schreibe einen Kommentar