【问题标题】:How to send file via Ajax call to Servlet如何通过 Ajax 调用向 Servlet 发送文件
【发布时间】:2021-06-24 15:01:54
【问题描述】:

我在 AEM 中有一个 HTML 表单,我必须在其中附加文件,并且相同的文件将通过 Java Servlet 发送到一个 Rest API。 我通过 Ajax 调用 Java Servlet 并能够将其他字符串数据发送到 Java Servlet,但在提交表单时无法发送包含附加到 HTML 表单附件选项的文件的文件数组。如何在 Java servlet 中获取文件?

在 JS 中

var myFile [] 是我在 ajax 调用中发送的内容。

$.ajax({ 网址:/servletUrl, 类型:'发布', 数据: { “我的文件”:我的文件, }, 成功:函数(响应){

} });

在 Java 中:

枚举参数对象 = request.getparameter();

当我将对象放入 HashMap 并尝试获取文件时,它的类型是字符串而不是对象。 我不确定在哪里将其设置为字符串。

【问题讨论】:

    标签: java ajax http-post aem ajaxform


    【解决方案1】:

    servlet 必须能够处理多部分消息。

    我不知道AEM,但是在Jakarta/Java Enterprise Edition/JEE/J2EE:

    1. 您必须专门将 @Multipart 注释添加到 servlet。
    2. 现在,打开您的浏览器,按 F12 进入调试详细信息,当您触发请求时,“网络”选项卡将显示所有发布的信息。查参数名,一般叫file[]
    3. 在servlet中处理请求时,可以使用HttpServletRequestrequest.getParts()方法查找所有参数部分。
    4. 使用final Part filePart = request.getPart(pFileParamName);final InputStream filecontent = filePart.getInputStream();,您将能够访问数据。

    这在大多数 servlet 框架中可能非常相似。

    【讨论】:

    • 您好,感谢您的回复。实际上 request.getParts() 方法在我使用的 SlingHttpServletRequest 接口中不可用。现在我正在尝试将 fileArray 转换为 Byte 并尝试将其转换为 Java。
    • 啊,您使用的是 Apache Sling。应该这么说的。这使它变得非常简单:您只需执行以下步骤(3)和(4),您只需执行以下操作:byte[] dataBytes = request.getRequestParameter("file[]").get();。可能会在两者之间进行一些检查,并可能将“file[]”替换为真实的 HTTP 参数名称,如步骤 (2) 中检测到的那样
    猜你喜欢
    • 2019-10-25
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2012-09-26
    • 2019-04-18
    • 2013-02-09
    • 1970-01-01
    相关资源
    最近更新 更多