将文件(excel)上传到服务器



我使用以下代码将文件上传到服务器。合适吗?代码中的路径"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()));
}
}

上传路径变量将带您到您的项目位置,然后检查是否有一些表单项发布,最后将文件写入该位置。
希望这有效!