在Java中使用DiskFileUpload
類來處理文件上傳。下面是一個簡單的示例:
import java.io.File;
import java.util.List;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/upload")
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 檢查是否為文件上傳的請求
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
response.getWriter().println("不是文件上傳請求");
return;
}
// 創建一個DiskFileItemFactory對象,用于將文件寫入磁盤
DiskFileItemFactory factory = new DiskFileItemFactory();
// 創建ServletFileUpload對象,并設置臨時文件的存儲路徑和文件大小的閾值
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1024 * 1024 * 10); // 最大文件大小為10MB
try {
// 解析請求,獲取所有的FileItem對象
List<FileItem> items = upload.parseRequest(request);
// 遍歷所有的FileItem對象
for (FileItem item : items) {
// 檢查是否為普通表單字段還是文件上傳字段
if (item.isFormField()) {
// 處理普通表單字段
String fieldname = item.getFieldName();
String fieldvalue = item.getString("UTF-8");
// 處理表單字段的值
} else {
// 處理文件上傳字段
String filename = item.getName();
// 存儲上傳的文件到指定的目錄
item.write(new File("/path/to/save/" + filename));
}
}
response.getWriter().println("文件上傳成功");
} catch (Exception e) {
response.getWriter().println("文件上傳失敗:" + e.getMessage());
}
}
}
上述代碼通過DiskFileItemFactory
類創建一個DiskFileItemFactory
對象,該對象用于將文件寫入磁盤。然后,通過ServletFileUpload
類創建一個ServletFileUpload
對象,并設置臨時文件的存儲路徑和文件大小的閾值。接下來,通過調用upload.parseRequest(request)
方法解析請求,獲取所有的FileItem
對象。然后遍歷所有的FileItem
對象,判斷是否為普通表單字段還是文件上傳字段,并做相應的處理。對于文件上傳字段,通過item.write()
方法將其存儲到指定的目錄中。最后,通過response.getWriter().println()
方法輸出上傳結果。
請注意,上述代碼需要使用Apache Commons FileUpload庫。您可以在項目的pom.xml
文件中添加以下依賴關系:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
以上代碼只是一個簡單的示例,實際應用中可能需要更多的處理邏輯和錯誤處理。