我使用以下代码将文件上传到服务器。合适吗?代码中的路径"d:/new"是服务器路径还是客户端 PC 路径。我是否必须在任何地方指定客户端计算机路径。或者它会在单击浏览按钮并选择文件时直接采用路径?除此之外,还有其他更好的方法将文件上传到服务器吗?
索引.html
<html>
<body>
<form class="form-group" action="go" method="post" enctype="multipart/form-data">
<%
Connection connection = null;
Statement statement = null;
String error = "";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/lms_data", "root", "");
statement = connection.createStatement();
ResultSet resultset = statement.executeQuery("select * from assessment_type");
connection.setAutoCommit(false);
%>
<label>Assessment Type</label>
<select class="form-control" name="assessment_type_id">
<% while (resultset.next()) {%>
<option value="<%= resultset.getString(1)%>"><%= resultset.getString(2)%></option>
<% } %>
</select>
<%
ResultSet resultset_cat_id = statement.executeQuery("select * from course_category");
%>
<br/><label>Category Name</label>
<select class="form-control" name="category_id">
<% while (resultset_cat_id.next()) {%>
<option value="<%= resultset_cat_id.getString(1)%>"><%= resultset_cat_id.getString(2)%></option>
<% } %>
</select>
<%
} catch (Exception e) {
if (!connection.isClosed()) {
connection.close();
}
out.println(e);
e.printStackTrace();
}
%>
<label class="control-label">Select File</label>
<input type="file" name="file" id="file"><br/>
<input type="submit" name="submitform" class="btn btn-primary" value="Submit" style="width:20%;border-radius:0px;"><br/><br/>
</form>
</body>
</html>
UploadServlet.java
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import com.oreilly.servlet.MultipartRequest;
public class UploadServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
MultipartRequest m=new MultipartRequest(request,"d:/new");
out.print("successfully uploaded");
}
}
网络.xml
<web-app>
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/go</url-pattern>
</servlet-mapping>
</web-app>
由于您使用的是多部分/表单数据,请尝试这段代码来获取文件并将其写入您定义的文件夹中的项目。
在项目中创建一个文件夹(即:文档/excel/)。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = "";
if (!ServletFileUpload.isMultipartContent((HttpServletRequest) request)) {
PrintWriter writer = response.getWriter();
writer.println("Error: Form must has enctype=multipart/form-data.");
writer.flush();
return;
}
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(3145728);
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
ServletFileUpload upload = new ServletFileUpload((FileItemFactory) factory);
upload.setFileSizeMax(41943040);
upload.setSizeMax(52428800);
String uploadPath = String.valueOf(this.getServletContext().getRealPath("")) + File.separator + "foldername"; // example : (documents/excel/)
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdir();
}
try {
List<FileItem> formItems = upload.parseRequest(request);
if (formItems != null && formItems.size() > 0) {
for (FileItem item : formItems) {
if (item.isFormField())
{
if ("assessment_type_id".equals(item.getFieldName()))
assessment= item.getString();
else if ("category_id".equals(item.getFieldName()))
categoryid= Integer.parseInt(item.getString());
}
else {
fileName = new File(item.getName()).getName();
String ext1 = FilenameUtils.getExtension(fileName);
fileName = fileName+ "." + ext1;
String filePath = String.valueOf(uploadPath) + File.separator + fileName;
File storeFile = new File(filePath);
item.write(storeFile);
request.setAttribute("message", "File Uploaded Successfully");
}
// then Here update the Database
}
}
} catch (Exception ex) {
request.setAttribute("message", (Object) ("There was an error: " + ex.getMessage()));
}
}
上传路径变量将带您到您的项目位置,然后检查是否有一些表单项发布,最后将文件写入该位置。
希望这有效!