gpt4 book ai didi

Java Servlet JSP 使用 apache commons FileUpload 删除文件

转载 作者:行者123 更新时间:2023-11-29 05:49:43 27 4
gpt4 key购买 nike

我已经搜索了这个主题很长一段时间,但没有找到任何能够解决我的问题的东西..所以我求助于你!

我有一个 JSP,我可以在其中打开一个文件对话框来选择一个文件。以前,我用它来将文件上传到指定目录(在我的代码中)。这很好用。我现在正尝试使用相同的代码通过在适当的目录中选择它并将其传递给我在下面包含的 servlet 来删除相同的文件。我正在使用 Apache Common FileUpload 库来执行此操作。

protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// checks if the request actually contains upload file
if (!ServletFileUpload.isMultipartContent(request)) {
// if not, we stop here
return;
}

// configures some settings
DiskFileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload delete = new ServletFileUpload(factory);

// constructs the directory path to delete file
String deletePath = UPLOAD_DIRECTORY;

// parses the request's content to extract file data
List formItems = delete.parseRequest(request);
Iterator iter = formItems.iterator();

// iterates over form's fields
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();


// processes only fields that are not form fields
if (!item.isFormField()) {


String fileName = new File(item.getName()).getName();
String filePath = deletePath + File.separator + fileName;
File storeFile = new File(filePath);

//File storeFile = new File("C:\\temp\\discLogo.txt");

// deletes the file on disk
boolean erased = storeFile.delete();
}
}

UPLOAD_DIRECTORY 是我存储上传 JSP 文件的地方。如果我取消注释我用硬编码目录为 storeFile 注释掉的行,只要我最初在目录中选择一个不同的文件,删除方法就可以正常工作。这让我相信 HttpServletRequest 将文件保存在内存中的某个地方。

这是正确的吗?有什么办法可以释放它,以便删除我最初选择的文件吗?还是有更简单的方法来做到这一点?

谢谢!

最佳答案

如果文件根本不存在,File#delete() 将返回false(使用File#exists() 测试之前),或者如果文件被锁定,因为它被另一个应用程序甚至您自己的代码打开!

如果这个文件是你自己的代码预先写入磁盘并保证不会在其他地方打开,那么你应该确保你在 finally 写入文件内容后阻塞。这个问题表明你没有。如果在写入文件后让文件保持打开状态,则在重新启动服务器/JVM 之前无法删除它。

Apache Commons IO,您应该已经将其作为 FileUpload 的依赖项,它带有方便的实用程序方法,可减少文件复制和关闭样板文件。

InputStream input = item.getInputStream();
OutputStream output = new FileOutputStream(storeFile);

try {
IOUtils.copy(input, output);
} finally {
IOUtils.closeQuietly(output);
IOUtils.closeQuietly(input);
}

另见:

关于Java Servlet JSP 使用 apache commons FileUpload 删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14390206/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com