我在网络应用程序中创建了文件夹(即上传文件)。我想再创建一个文件夹"上传"运行时的文件夹取决于用户的用户名。为此我写了下面的代码。此代码正在创建文件夹和文件,但位置与我预期的不同。
我得到的位置是eclipse位置而不是Web应用程序位置
D:\PAST\RequiredPlugins\JUNO\eclipse\uploads\datto\adhar.PNG
然后我在FileOutStream中收到错误,"系统无法找到指定的位置。"
public String getFolderName(String folderName, MultipartFile uploadPhoto)
throws ShareMeException {
File uploadfFile = null;
try {
File file = new File("uploads\\" + folderName);
if (!file.exists()) {
file.mkdir();
}
uploadfFile = new File(file.getAbsoluteFile()
+ "\\"+uploadPhoto.getOriginalFilename());
if (uploadfFile.exists()) {
throw new ShareMeException(
"file already exist please rename it");
} else {
uploadfFile.createNewFile();
FileOutputStream fout = new FileOutputStream(uploadfFile);
fout.write(uploadPhoto.getBytes());
fout.flush();
fout.close();
}
} catch (IOException e) {
throw new ShareMeException(e.getMessage());
}
return uploadfFile.getAbsolutePath();
}
我想在网络应用中保存上传的文件"上传"夹
答案 0 :(得分:1)
您的文件名不是绝对的: jenkins_home/jobs/myapp/builds/build_number/myapp$myapp/archive/myapp/directory
是针对当前目录解析的,Eclipse启动器设置为uploads\folderName
。
您应该引入一个类似JUNO\eclipse
的应用程序变量,并针对此变量解析任何数据目录(包括APP_HOME
)。
此外,我建议在用户输入的输入后不要在文件系统上命名任何内容(文件或目录):你要求麻烦(用户名中的unicode字符),特别是安全漏洞 (即使与unicode的东西结合)。如果你真的想使用文件系统,请保持文件名匿名(1.data,2.data,...)并将元数据保存在某个数据库中。
答案 1 :(得分:0)
您可以在网络应用中的以下位置执行操作: -
String folderPath= request.getServletContext().getRealPath("/");
File file = new File (folderPath+"upload");
file.mkdir();