Java 上传文件并将其存储到文件夹中?
我正在尝试对我的应用程序进行编程,以上载图像,然后将其存储在文件夹中。它打印出文件的详细信息,但不将其存储到文件夹中。我正在遵循用户指南和这里的答案,但我仍然不知道我做错了什么Java 上传文件并将其存储到文件夹中?,java,jsp,Java,Jsp,我正在尝试对我的应用程序进行编程,以上载图像,然后将其存储在文件夹中。它打印出文件的详细信息,但不将其存储到文件夹中。我正在遵循用户指南和这里的答案,但我仍然不知道我做错了什么 import java.io.File; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpS
import java.io.File;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadAvatarCommand implements Command {
@Override
public String execute(HttpServletRequest request,
HttpServletResponse response) {
DiskFileItemFactory factory = new DiskFileItemFactory();
String contextRoot = request.getServletContext().getRealPath("/");
factory.setRepository(new File(contextRoot + "WEB-INF/tmp"));
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
// Process form file field (input type="file").
System.out.println("Field name: " + item.getFieldName());
System.out.println("File name: " + item.getName());
System.out.println("File size: " + item.getSize());
System.out.println("File type: " + item.getContentType());
String fileName = item.getName();
try {
File saveFile = new File(fileName);
saveFile.createNewFile();
item.write(saveFile);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
try {
throw new ServletException("Cannot parse multipart request.", e);
} catch (ServletException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return "profile";
}
}
导入java.io.File;
导入java.util.List;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.apache.commons.fileupload.FileItem;
导入org.apache.commons.fileupload.FileUploadException;
导入org.apache.commons.fileupload.disk.DiskFileItemFactory;
导入org.apache.commons.fileupload.servlet.ServletFileUpload;
公共类UploadAvatarCommand实现命令{
@凌驾
公共字符串执行(HttpServletRequest请求,
HttpServletResponse(响应){
DiskFileItemFactory=新的DiskFileItemFactory();
字符串contextRoot=request.getServletContext().getRealPath(“/”);
setRepository(新文件(contextRoot+“WEB-INF/tmp”);
ServletFileUpload upload=新的ServletFileUpload(工厂);
试一试{
列表项=upload.parseRequest(请求);
用于(文件项:项){
如果(!item.isFormField()){
//处理表单文件字段(输入类型=“文件”)。
System.out.println(“字段名:+item.getFieldName());
System.out.println(“文件名:+item.getName());
System.out.println(“文件大小:+item.getSize());
System.out.println(“文件类型:+item.getContentType());
字符串文件名=item.getName();
试一试{
File saveFile=新文件(文件名);
saveFile.createNewFile();
item.write(保存文件);
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
}捕获(文件上载异常){
试一试{
抛出新的ServletException(“无法解析多部分请求。”,e);
}捕获(ServletException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
}
返回“profile”;
}
}
如果您没有任何错误,那么这段代码:
File saveFile = new File(fileName);
saveFile.createNewFile();
item.write(saveFile);
在当前文件夹中创建一个名为fileName
(这只是一个简单的名称,如“file.txt”)的新文件
如果您想知道哪个是您当前的工作文件夹,请尝试打印:
System.out.println("Current folder: " + (new File(".")).getCanonicalPath())
所以你可以检查文件是否在这里
然后,如果要将文件放在所需的文件夹中,则可以使用:
File saveFile = new File("/my/upload/folder",fileName);
并将“/my/upload/folder”替换为您喜欢的文件夹路径。此程序工作正常 这个变量位于顶部
private static final String DATA_DIRECTORY = "data";
这是主要节目
DiskFileItemFactory factory = new DiskFileItemFactory();
String contextRoot = getServletContext().getRealPath("/");
factory.setRepository(new File(contextRoot));
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
// Process form file field (input type="file").
System.out.println("Field name: " + item.getFieldName());
System.out.println("File name: " + item.getName());
System.out.println("File size: " + item.getSize());
System.out.println("File type: " + item.getContentType());
String fileName = item.getName();
try {
String uploadFolder = getServletContext().getRealPath("")+ File.separator + DATA_DIRECTORY;
String filePath = uploadFolder + File.separator + fileName;
File saveFile = new File(filePath);
saveFile.createNewFile();
item.write(saveFile);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} catch (FileUploadException e) {
try {
throw new ServletException("Cannot parse multipart request.", e);
} catch (ServletException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
DiskFileItemFactory=new DiskFileItemFactory();
字符串contextRoot=getServletContext().getRealPath(“/”);
setRepository(新文件(contextRoot));
ServletFileUpload upload=新的ServletFileUpload(工厂);
试一试{
列表项=upload.parseRequest(请求);
用于(文件项:项){
如果(!item.isFormField()){
//处理表单文件字段(输入类型=“文件”)。
System.out.println(“字段名:+item.getFieldName());
System.out.println(“文件名:+item.getName());
System.out.println(“文件大小:+item.getSize());
System.out.println(“文件类型:+item.getContentType());
字符串文件名=item.getName();
试一试{
String uploadFolder=getServletContext().getRealPath(“”+File.separator+DATA_目录;
字符串filePath=uploadFolder+File.separator+fileName;
File saveFile=新文件(filePath);
saveFile.createNewFile();
item.write(保存文件);
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
}捕获(文件上载异常){
试一试{
抛出新的ServletException(“无法解析多部分请求。”,e);
}捕获(ServletException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
}
您应该在控制台上打印文件名和saveFile.getPath()。你在哪里找文件?有什么例外吗?您能告诉我们如何上传文件吗?新文件(“.”)。getCanonicalPath()
显示我的Eclipse根文件夹。有没有办法让它将图像存储到我工作区的项目文件夹中(它不在我的Eclipse文件夹中)?看看我在哪里写的“那么如果你想把文件放在上面…”我解释了怎么做。是的,我知道了。这可以工作:新文件(../Workspace/Project2/My_Application/WebContent/images/“+fileName)代码>但是当我将应用程序移动到生产服务器时,是否有更好的方法更易于维护?您可以使用此方法在应用程序文件夹中获取路径:search getRealPath。