将图像/视频从 html 获取到 java servlet 作为 new File()

Posted

技术标签:

【中文标题】将图像/视频从 html 获取到 java servlet 作为 new File()【英文标题】:Getting image/video from html into java servlet as new File() 【发布时间】:2018-07-16 22:44:36 【问题描述】:

我想从

中获取文件(图像或视频)
<input type='file' id='file_i'/>
// Not this <input type='submit'/>

像这样使用XMLHttpRequest

function img() 
            var fd = new FormData();
            fd.append('file', document.getElementById("file_i").files[0]);
            var req;
            if (window.ActiveXObject) 
                req=new ActiveXObject();
             else 
                req=new XMLHttpRequest();
            
            req.open("post", "Image", true);
            req.send(fd);
        

例如。 然后在 servlet 中这样做:

new FileInputStream(new File(request.getParameter("file")))

如何检索该文件? 提前致谢。

【问题讨论】:

可能重复:How to upload files to server using JSP/Servlet? 可能重复:Simulate file form submission with XMLHttpRequest Level 2 这两个链接应该回答你的问题 如果您回答我的问题并提供 javascripthtml 和 java 示例代码,我们将不胜感激,因为它似乎对我不起作用 您在服务器端使用什么 Java 技术?普通的servlet? JAX-RS?春天MVC?你在使用 ORM 吗?休眠? JPA?或 JDBC 直接连接到哪个数据库? mysql? PostgreSQL?你也可以使用jQuery客户端吗? 【参考方案1】:

我修好了。这里是:

JAVASCRIPT

var fd = new FormData();
fd.append('file', document.getElementById("file_i").files[0]);
var req;
if (window.ActiveXObject) 
    req=new ActiveXObject();
 else 
    req=new XMLHttpRequest();

req.open("post", "Image", true);
req.send(fd);

JAVA

@MultipartConfig
public class addImage extends HttpServlet 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException 
        Part filePart = request.getPart("file");
        InputStream fileContent = filePart.getInputStream();


XML

<servlet>
        <servlet-name>Add Image</servlet-name>
        <servlet-class>servlets.addImage</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Add Image</servlet-name>
    <url-pattern>/Image</url-pattern>
</servlet-mapping>

【讨论】:

【参考方案2】:

我认为你错过了一些要点。

    在您的 JavaScript 代码中,您似乎只是创建了请求。但是你没有对结果做出回应。

    req.addEventListener("load", reqListener);
    

    你应该这样定义 reqListener:

    function reqListener () 
        // Here try to handle the response text, using "this.responseText"
        console.log(this.responseText);
    
    

    在此处查看完整信息: Using XMLHttpRequest

    同样在您的 Java 代码中,您刚刚声明您创建了一个文件流。 您应该从此输入流中读取请求的输出流。另外你应该设置标题Content-Type: put_your_mime_type_here,例如:Content-Type: application/json,如果你的文件是json文件,Content-Type: image/png,如果你的文件是PNG图像。

    在此处查看示例:Example for making a file download URL in Java

【讨论】:

以上是关于将图像/视频从 html 获取到 java servlet 作为 new File()的主要内容,如果未能解决你的问题,请参考以下文章

将图像、音频和文本流批量导出到浏览器中的视频

HTML5 从图像生成视频

如何将图像从 plist 加载到 UITableView?

如何从图像选择器中获取 NSData?

在ios中上传后如何从firebase获取缩略图?

如何将文件从 JavaScript 发送到 Java WebService