【发布时间】:2014-01-16 05:22:04
【问题描述】:
我正在 Ubuntu 中开发我的应用程序。我有一个 Java Web Spring MVC 应用程序。在那我有一个控制器。客户端可以上传文件(通过 AngularJS 发布)。在控制器中,我获取文件并复制到特定位置。
这是我的控制器
@RequestMapping(value = "/fileUpload", method = RequestMethod.POST)
@ResponseBody
public String UploadFile(HttpServletRequest request,HttpServletResponse response) {
SimpleDateFormat sdf = new SimpleDateFormat("MM_dd_yyyy_HHmmss");
String date = sdf.format(new Date());
String fileLoc = null;
MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
Iterator<String> itr = mRequest.getFileNames();
while (itr.hasNext()) {
MultipartFile mFile = mRequest.getFile(itr.next());
String fileName = mFile.getOriginalFilename();
String homePath=System.getProperty("user.home");
String separator=File.separator;
fileLoc = homePath + separator + "myapp" + separator + "file-uploads" +
separator + date + "_" + fileName;
System.out.println(fileLoc);
try {
File file = new File(fileLoc);
// If the directory does not exist, create it
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
FileCopyUtils.copy(mFile.getBytes(), file);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
catch(Exception e) {
e.printStackTrace();
}
}
return fileLoc;
}
但是当我将它部署在 tomcat 服务器中并运行时,文件会在 root 中创建。
当我打印 fileLoc 的值时,它显示
/root/myapp/file-uploads/01_16_2014_000924_document.jpg
我在控制器中添加了一个 main 方法。
public static void main(String[] args) {
String homePath=System.getProperty("user.home");
String separator=File.separator;
System.out.println("Home Path: " + homePath);
System.out.println("Separator: " + separator);
}
当我将它作为 Java 应用程序运行时,我得到了正确的输出
Home Path : /home/shiju
Separator : /
为什么在 Tomcat 上运行时给 root 权限?
【问题讨论】:
-
tomcat进程在哪个用户下运行?
-
你是否以root身份运行tomcat?
-
errr 因为 Tomcat 以 root 身份运行?
-
可以粘贴运行tomcat命令行选项吗?
-
tomcat 位置是
/usr/share/tomcat7/apache-tomcat-7.0.42,我以sudo开始startup.sh。因为没有sudo,它就没有开始。是因为这个吗?
标签: java tomcat spring-mvc system-properties