【发布时间】:2018-07-25 04:51:02
【问题描述】:
我有一个 java web 应用程序,带有 spring 4 和 jstl,部署在 wildfly 上,安装在 linux 服务器上。在这个应用程序中,我必须上传 Excel 文件以提取数据并在某个表中注入漏洞。为此,我为 multipart 定义了此配置:
public class myAppServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
...
private static final String TEMP_FOLDER_NAME = "tmp"; // Temporary location where files will be stored
private static final long MAX_FILE_SIZE = 5242880; // 5MB : Max file size.
// Beyond that size spring will throw exception.
private static final long MAX_REQUEST_SIZE = 20971520; // 20MB : Total request size containing Multi part.
private static final int FILE_SIZE_THRESHOLD = 0; // Size threshold after which files will be written to disk
private MultipartConfigElement getMultipartConfigElement() {
StringBuilder uploadTempDirectoryUrl = new StringBuilder();
uploadTempDirectoryUrl.append(System.getenv(XeryaConstants.HOME_ENV_VARIABLE_NAME)).append(File.separator)
.append(TEMP_FOLDER_NAME);
File tempDirectory = new File(uploadTempDirectoryUrl.toString());
if (!tempDirectory.exists()) {
log.info("XeryaServletInitializer - Create temp directory " + uploadTempDirectoryUrl);
tempDirectory.mkdir();
}
log.info("XeryaServletInitializer - Multiplart temporal directory: " + uploadTempDirectoryUrl);
MultipartConfigElement multipartConfigElement = new MultipartConfigElement(System.getenv(AppConstants.HOME_ENV_VARIABLE_NAME),
MAX_FILE_SIZE, MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD);
return multipartConfigElement;
}
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setMultipartConfig(getMultipartConfigElement());
}
}
这是一般错误方法的代码(行间**)
public static File convert(MultipartFile file) throws IOException
{
File convFile = new File(file.getOriginalFilename());
**convFile.createNewFile();**
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
在 linux 服务器中,在 wildfly 的配置文件中创建的 tmp 文件夹具有以下凭据:
root@VM-XITS01-DEV:/opt/xerya_home# ls -ld
drwxr-xr-x 9 wildfly wildfly 4096 juil. 25 02:21
问题是当我从 windows 操作系统上传 excel 文件时,我有这个错误:
2018-07-25 03:06:25,192 ERROR [stderr] (default task-47) java.io.IOException: Permission denied
2018-07-25 03:06:25,192 ERROR [stderr] (default task-47) at java.io.UnixFileSystem.createFileExclusively(Native Method)
2018-07-25 03:06:25,193 ERROR [stderr] (default task-47) at java.io.File.createNewFile(File.java:1012)
2018-07-25 03:06:25,193 ERROR [stderr] (default task-47) at com.xerya.school.util.XeryaUtils.convert(XeryaUtils.java:103)
2018-07-25 03:06:25,193 ERROR [stderr] (default task-47) at com.xerya.school.web.validator.rest.importdata.RestImportDataStudentController.uploadFile(RestImportDataStudentController.java:75)
有人可以帮我解决这个问题吗?在 Windows 中一切正常。
【问题讨论】:
-
您发布的代码不是失败的代码 - 请发布
XeryaUtils.convert和RestImportDataStudentController.uploadFile的代码 -
您是否尝试在所有内容上都设置为 rwx (rwxrwxrwx),而不仅仅是 rwxr_xr_x?
-
您可以尝试给予所有许可。 chmod 777 -R /opt/xerya_home/
-
@Scary,我用生成错误的代码完成了问题。我从我的 windows pc 上传文件,应用程序部署在 linux 上。当我使用部署在 xindows 上的应用程序进行测试时,一切正常
-
做一些简单的调试,让我们知道
file.getOriginalFilename()的值是什么。