如何使用JSP -Servlet和EJB 3.0上载映像

Geo*_*rge 2 upload jsp servlets image

我想使用JSP Servlet和ejb 3.0上传一个Image

Bal*_*usC 6

首先,要使用JSP选择要上载的文件,您至少需要一个<input type="file">显示文件浏览字段的HTML 元素.如HTML表单规范中所述,您需要在父元素中设置请求方法POST和请求编码.multipart/form-data<form>

<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

因为在Servlet 3.0之前Servlet API默认不支持上述请求编码(我认为你没有使用它,因为EJB 3.0是Java EE 5.0的一部分,而Java EE 5.0又只包含Servlet 2.5),所以你赢了看到请求参数映射中的任何内容.在request.getParameter("file")将返回null.

要检索上传的文件,并在一个servlet其他请求参数,你需要解析InputStream的的HttpServletRequest自己.幸运的是,有一个常用的API可以从您手中完成繁琐的工作:Apache Commons FileUpload.

List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
    if (!item.isFormField()) {
        // <input type="file">
        System.out.println("Field name: " + item.getFieldName());
        System.out.println("File name: " + item.getName());
        System.out.println("File size: " + item.getSize());
        System.out.println("File type: " + item.getContentType());
    } else {
        // <input type="text|submit|hidden|password|button">, <select>, <textarea>, <button>
        System.out.println("Field name: " + item.getFieldName());
        System.out.println("Field value: " + item.getString());
    }            
}
Run Code Online (Sandbox Code Playgroud)

基本上你只需InputStream要从FileItem对象中获取并OutputStream使用通常的Java IO方式将其写入任何您喜欢的东西.

InputStream content = item.getInputStream();
Run Code Online (Sandbox Code Playgroud)

或者你也可以直接写它:

item.write(new File("/uploads/filename.ext"));
Run Code Online (Sandbox Code Playgroud)

在他们的主页上,您可以在" 用户指南"和" 常见问题解答"部分找到许多代码示例和重要提示和技巧.仔细阅读它们.