如何在不使用HTML5中的输入文件的情况下上传在java中创建的文件

时间:2016-05-11 03:41:34

标签: javascript java ajax html5 wcf

我是大家,我想知道如何在没有输入文件的情况下在HTML5中上传文件,或者至少不点击它。如果有办法在没有点击的情况下将其放入并搜索它,我想听听它。

问题是,在HTML5中我有一个表,当点击它时会打开一个带有信息的模态,该信息由AJAX发送到.jsp文件,我在某个路径中使用信息创建PDF。我想使用相同的文件上传它与WCF服务,但我所能做的就是创建它,然后用输入文件查找它,但我想在输入文件中使用它。 / p>

以下是我的一些代码......

我创建PDF文件的JSP文件:

<%
String idP = request.getParameter("idP");
String nombreP = request.getParameter("NombreP");
String nombreC = request.getParameter("NombreC");
String presupuesto = request.getParameter("Presupuesto");
String avance = request.getParameter("Avacne");
String empleado = request.getParameter("Empleado");
String constructora = request.getParameter("Constructora");
String idC = request.getParameter("idC");
String idE = request.getParameter("idE");
String idT = request.getParameter("idT");

Font GreenFont = FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD, new CMYKColor(0, 0, 255, 0));
Font yellowFont = FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD, new CMYKColor(255, 0, 255, 0));
String path = "E:" + File.separator + "Reportes" + File.separator + "Reporte " + nombreP + ".pdf";
Document document = new Document();
File file = new File(path);
try {
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file.getPath()));
    document.open();

    Paragraph chapterTitle = new Paragraph(nombreP, yellowFont);
    Chapter chapter1 = new Chapter(chapterTitle, 1);
    chapter1.setNumberDepth(0);
    document.add(chapter1);

    document.add(new Paragraph("Nombre cliente:" + nombreC));
    document.add(new Paragraph("Presupuesto: $" + presupuesto));
    document.add(new Paragraph("Avance del proyecto: %" + avance));
    document.add(new Paragraph("Nombre del empleado: " + empleado));
    document.add(new Paragraph("Constructora: " + constructora));
    document.add(new Paragraph("Id_Proyecto: " + idP));
    document.add(new Paragraph("Id_Constructora: " + idC));
    document.add(new Paragraph("Id_Empleado: " + idE));
    document.add(new Paragraph("Id_Tipo: " + idT));

    document.addAuthor("Erick Adahir");
    document.addCreationDate();
    document.addCreator("LorCyC");
    document.addTitle("AVAVAGO");
    document.addSubject("Un simple ejemplo");

    document.close();
    writer.close();
} catch (DocumentException e) {
    e.printStackTrace();
} catch (FileNotFoundException e) {
    e.printStackTrace();
}
%>

调用JSP的函数:

function agregarEventoDoubleClickEnTablaProyecto()
{
$('#tablaProyecto td').dblclick(function ()
{
    var $this = $(this);

    var row = $this.closest("tr"); //Hacemos referencia al registro padre de la celda
    //alert(row.find('td:eq(0)').text());
    //row.find('td:firs').text();

    alert("PDF");
    $.ajax({
        url: "Proyecto/creaPDF.jsp",            
        data: {                
            idP: id,
            NombreP: row.find('td:eq(1)').text(),
            NombreC: row.find('td:eq(2)').text(),
            Presupuesto: row.find('td:eq(3)').text(),
            Avance: row.find('td:eq(4)').text(),
            Tipo: row.find('td:eq(5)').text(),
            Empleado: row.find('td:eq(6)').text(),
            Constructora: row.find('td:eq(7)').text(),
            idC: row.find('td:eq(8)').text(),
            idE: row.find('td:eq(9)').text(),
            idT: row.find('td:eq(10)').text()
        }            
    }).done(function (data) {
        alert("nice...");
    });
    $('#areaDatosProyecto').modal({
        show: 'true'
    });
});
}

最后,使用输入文件上传文件的功能:

function subir() {
            var archivo = document.getElementById("btnFile").files[0];
            alert(archivo);
            var fr = new FileReader();
            fr.onload = function () {
                var bString = this.result;                 
                var objUp = {
                    elemento: {
                        NombreOriginal: "nombre",
                        Documento: bString.split("base64,")[1]
                    }
                };
                $.ajax({
                    url: "http://localhost:84/Uploader/ServicioUploader.svc/ArchivarDocumento",
                    data: JSON.stringify(objUp),
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=UTF-8",
                    success: function (data) {
                        var id = data.d;
                        alert(id);
                    },
                    error: function (xnr, status, error) {
                        alert("XNR: " + xnr + ", STATUS: " + status + ", ERROR: " + error);
                    }
                });
            };
            fr.readAsDataURL(archivo);
        }

希望有人可以帮我一把!谢谢!

2 个答案:

答案 0 :(得分:1)

您正在JSP中创建文件。 这意味着它应该在托管服务器的 (E:/ Reportes / Reporte / [您的文件名] .pdf) 路径上创建。

您可以在JSP本身(正在创建文件对象的位置)中编写要上载的代码。

我没有看到两个AJAX调用点。

答案 1 :(得分:1)

我不是100%确定我理解您要做的事情,但如果我正确理解您的问题,听起来您正在自己的系统上创建此PDF“服务器端”,并将其保存到磁盘,然后在同一系统上加载一个“客户端”Web应用程序,在那里你有一个上传控件(即文件选择器),用户选择PDF然后上传到另一台服务器,但你试图避免需要用户手动选择要在最后一步上传的文件。

如果是这种情况,遗憾的是你无法做到这一点,因为它存在安全风险,任何现代浏览器都不允许您以编程方式从用户的硬盘驱动器上传文件而无需手动选择文件。

所以,不要试图消极,但听起来你可能会以错误的方式解决这个问题。为什么不从服务器端(JSP)代码创建和上传PDF?似乎在这里添加客户端Web应用程序是不必要的。既然你已经知道WHERE发送PDF(你的URL在那里看起来很难编码)并且你显然控制着服务器端代码,那么最简单的解决办法就是打开HTTPUrlConnection(或使用你喜欢的任何库)来发送PDF的原始字节到它的最终目的地。