【问题标题】:How to upload a file created in java without using Input file in HTML5如何在不使用 HTML5 中的输入文件的情况下上传用 java 创建的文件
【发布时间】:2016-09-06 06:27:50
【问题描述】:

各位,我想知道如何上传 HTML5 文件,无需输入文件,或者至少无需点击。如果有办法在不点击和搜索的情况下将其放入,我想听听。

问题是,在 HTML5 中,我有一个表格,单击它会打开一个带有信息的模式,该信息由 AJAX 发送到一个 .jsp 文件,我使用该信息在某个路径中创建一个 PDF。我想使用同一个文件通过 WCF 服务上传它,但我所能做的就是创建它,然后使用输入文件查找它,但我想在没有输入文件的情况下使用它。

这是我的一些代码...

我在其中创建 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);
        }

希望有人能帮帮我!谢谢!

【问题讨论】:

    标签: javascript java ajax html wcf


    【解决方案1】:

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

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

    我没有看到两个 AJAX 调用的意义。

    【讨论】:

    • 但是我以为Java中没有办法调用WCF,我想我明白你的意思,但是我想知道的是如何发送文件对象?
    • 哦。我明白了。不过,这可能很棘手,因为文件是在服务器上创建的(来自 JSP),而您的 javascript 的 CLIENT 将是 USER,您将无法通过客户端脚本执行此操作。 1)客户端脚本会在客户端机器上找到路径(并且文件是在服务器上创建的),因此找不到文件。 2)如果您以某种方式使这成为可能,由于安全性问题,您无法通过 jQuery/Javascript 访问客户端计算机上的物理文件。您必须找到一种“仅后端”的方式来执行此操作。
    【解决方案2】:

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

    如果您遇到这种情况,很遗憾您不能这样做,因为这会带来安全风险,任何现代浏览器都不允许您在没有用户手动选择文件的情况下以编程方式从用户硬盘上传文件。

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

    【讨论】:

    • 同意。而且,来自 JSP 的“FILE”对象是在服务器上创建的,并且访问是通过前端脚本 (jQuery/javascript) 进行的,前端脚本会尝试在客户端上查找文件,但实际上它将在服务器上。因此,“仅后端”方法是可行的方法。
    猜你喜欢
    • 1970-01-01
    • 2010-09-14
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2020-04-03
    相关资源
    最近更新 更多