如何使用 multipart/form-data 在服务器中上传文件?
how to upload a file in server using multipart/form-data?
我在 jsp 中编写了一个程序,用于将文件上传到在 webcontent 中创建的名为 images 的文件夹中,但我的文件没有上传。请需要一些帮助。
<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>
upload_images_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>");
}
%>
输出打印为未上传文件
谢谢
您在 html 中使用了错误的属性。
属性 enctype="multipart/form-data" 仅在标记 form 中使用,如下所示。
<form action="upload_images_result.jsp"
method="post"
enctype="multipart/form-data">
</form>
或者,您可以在 tag input type="submit" 中使用,如下所示。
<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(默认)
- multipart/form-data
- text/plain
当您的表单包含任何 <input type="file">
元素时使用 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>
我在 jsp 中编写了一个程序,用于将文件上传到在 webcontent 中创建的名为 images 的文件夹中,但我的文件没有上传。请需要一些帮助。
<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>
upload_images_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>");
}
%>
输出打印为未上传文件
谢谢
您在 html 中使用了错误的属性。 属性 enctype="multipart/form-data" 仅在标记 form 中使用,如下所示。
<form action="upload_images_result.jsp"
method="post"
enctype="multipart/form-data">
</form>
或者,您可以在 tag input type="submit" 中使用,如下所示。
<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(默认)
- multipart/form-data
- text/plain
当您的表单包含任何 <input type="file">
元素时使用 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>