Java 如何使用多部分/表单数据在服务器中上载文件?

Java 如何使用多部分/表单数据在服务器中上载文件?,java,image,jsp,Java,Image,Jsp,我已经用jsp编写了一个程序,将一个名为images created inside webcontent的文件夹中的文件上载,但我的文件没有被上载。请给我一些帮助 <form action="upload_images_result.jsp" method="post"> <div align="left"> Select a file: <input type="file" name="file" size="50"

我已经用jsp编写了一个程序,将一个名为images created inside webcontent的文件夹中的文件上载,但我的文件没有被上载。请给我一些帮助

<form action="upload_images_result.jsp" method="post">
    <div align="left">
        Select a file: <input type="file" name="file" size="50"
            enctype="multipart/form-data" placeholder="Upload Your Image" />
    </div>
    <br>
    <div>
        <input type="submit" value="Upload File" />
    </div>
</form>

选择一个文件:

上传图片\u result.jsp

<%
File file;
int maxFileSize = 5000 * 1024;
int maxMemSize = 5000 * 1024;
//ServletContext context = pageContext.getServletContext();
String filePath = "D:\\Students_Server\\WebContent\\Images";
// Verify the content type
String contentType = request.getContentType();
if ((contentType.indexOf("multipart/form-data") >= 0)) {

    DiskFileItemFactory factory = new DiskFileItemFactory();
    // maximum size that will be stored in memory
    factory.setSizeThreshold(maxMemSize);
    // Location to save data that is larger than maxMemSize.
    factory.setRepository(new File(               
    filePath "));
    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);
    // maximum file size to be uploaded.
    upload.setSizeMax(maxFileSize);
    try {
        // Parse the request to get file items.
        List fileItems = upload.parseRequest(request);
        // Process the uploaded file items
        Iterator i = fileItems.iterator();

        out.println("<html>");
        out.println("<head>");
        out.println("<title>JSP File upload</title>");
        out.println("</head>");
        out.println("<body>");
        while (i.hasNext()) {
            FileItem fi = (FileItem) i.next();
            if (!fi.isFormField()) {
                // Get the uploaded file parameters
                String fieldName = fi.getFieldName();
                String fileName = fi.getName();
                boolean isInMemory = fi.isInMemory();
                long sizeInBytes = fi.getSize();
                // Write the file
                if (fileName.lastIndexOf("\\") >= 0) {
                    file = new File(filePath +
               fileName.substring(fileName.lastIndexOf("\\")));
                } else {
                    file = new File(filePath + 
              fileName.substring(fileName.lastIndexOf("\\") + 1));
                }
                fi.write(file);
                out.println("Uploaded Filename: " + filePath + fileName + "
                <br>");
            }
        }
        out.println("</body>");
        out.println("</html>");
    } catch (Exception ex) {
        System.out.println(ex);
    }
} else {
    out.println("<html>");
    out.println("<head>");
    out.println("<title>Servlet upload</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<p>No file uploaded</p>");
    out.println("</body>");
    out.println("</html>");
}
%>
=0){
DiskFileItemFactory=新的DiskFileItemFactory();
//将存储在内存中的最大大小
factory.setSizeThreshold(maxMemSize);
//保存大于maxMemSize的数据的位置。
setRepository(新文件(
文件路径);
//创建新的文件上载处理程序
ServletFileUpload upload=新的ServletFileUpload(工厂);
//要上载的最大文件大小。
upload.setSizeMax(maxFileSize);
试一试{
//解析请求以获取文件项。
List fileItems=upload.parseRequest(请求);
//处理上载的文件项
迭代器i=fileItems.Iterator();
out.println(“”);
out.println(“”);
println(“JSP文件上传”);
out.println(“”);
out.println(“”);
while(i.hasNext()){
FileItem fi=(FileItem)i.next();
如果(!fi.isFormField()){
//获取上传的文件参数
字符串fieldName=fi.getFieldName();
字符串文件名=fi.getName();
布尔值isInMemory=fi.isInMemory();
long-sizeInBytes=fi.getSize();
//写文件
如果(fileName.lastIndexOf(“\\”>)=0){
文件=新文件(文件路径+
fileName.substring(fileName.lastIndexOf(“\\”);
}否则{
文件=新文件(文件路径+
fileName.substring(fileName.lastIndexOf(“\\”+1));
}
fi.写入(文件);
println(“上传的文件名:+filePath+Filename+”

”; } } out.println(“”); out.println(“”); }捕获(例外情况除外){ 系统输出打印项次(ex); } }否则{ out.println(“”); out.println(“”); out.println(“Servlet上传”); out.println(“”); out.println(“”); out.println(“没有上传文件”

”; out.println(“”); out.println(“”); } %>
输出正在打印,因为没有上载文件


谢谢

您在html中使用了错误的属性。 属性enctype=“multipart/form data”仅在标记中使用,如下所示

<form action="upload_images_result.jsp"
      method="post" 
      enctype="multipart/form-data">
</form>
<form action="upload_images_result.jsp" 
      method="post">
  <input type="submit" 
         formenctype="multipart/form-data" 
         value="Submit as Multipart/form-data"/>
</form>

或者,您可以在中使用,如下所示

<form action="upload_images_result.jsp"
      method="post" 
      enctype="multipart/form-data">
</form>
<form action="upload_images_result.jsp" 
      method="post">
  <input type="submit" 
         formenctype="multipart/form-data" 
         value="Submit as Multipart/form-data"/>
</form>

发出POST请求时,必须以某种方式对构成请求主体的数据进行编码

HTML表单提供三种编码方法

  • application/x-www-form-urlencoded(默认值)
  • 多部分/表单数据
  • 文本/纯文本
当表单包含任何
元素时,请使用
enctype=multipart/form data

所以使用

<form action="upload_images_result.jsp" method="post" enctype="multipart/form-data">
    <div align="left">
        Select a file: <input type="file" name="file" size="50"
            enctype="multipart/form-data" placeholder="Upload Your Image" />
    </div>
    <br>
    <div>
        <input type="submit" value="Upload File" />
    </div>
</form>

选择一个文件:


thanx先生,您的第一个回答也是正确的