1

我想在 mac 上创建一个名称中包含空字符的文件。文件名如 - abc\0ds.txt 我尝试创建一个名为“abc\0ahd.txt”的文件,但名称中的 \0 并不是真正的 unicode 空字符。这是另一个角色。我想创建一个名称中包含空字符的文件,因为我想重现一个用于我的应用程序集成测试的场景,该场景使用 fileItemStream.getName() (org.apache.commons.fileupload.FileUploadBase) 来获取文件名,然后它应该抛出 InvalidFileNameException 异常(org.apache.commons.fileupload.InvalidFileNameException)

我们在生产中遇到这样的场景并获得类似“org.apache.commons.fileupload.InvalidFileNameException:无效文件名:uploadertest.asp\0.png”的日志,但我无法通过从我的系统或集成测试上传文件来重现这种情况但是当我像这样发送字节流时,它可以从单元测试中重现。

byte[] formData = getFormData(boundary, defaultFormParams, invalidFileNameWithNullCharacter);

MockHttpServletRequestBuilder request = getRequest(boundary, formData);
4

1 回答 1

0

所以我得到了答案。它是“不,我永远不能创建名称中包含空字符的文件”

Exception in thread "main" java.nio.file.InvalidPathException: Nul character not allowed: /Users/hhims/Documents/TestCode/a.txt
    at sun.nio.fs.UnixPath.checkNotNul(UnixPath.java:93)
    at sun.nio.fs.UnixPath.normalizeAndCheck(UnixPath.java:83)
    at sun.nio.fs.UnixPath.<init>(UnixPath.java:71)
    at sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:281)
    at java.io.File.toPath(File.java:2234)
    at sun.nio.fs.UnixUriUtils.fromUri(UnixUriUtils.java:61)
    at sun.nio.fs.UnixFileSystemProvider.getPath(UnixFileSystemProvider.java:98)
    at java.nio.file.Paths.get(Paths.java:138)
    at Main.testExists(Main.java:35)
    at Main.main(Main.java:24)

为了解决我的问题,我创建了一个字节流,设置了文件的名称和边界并发出了一个 http 请求。没有将文件保存在磁盘上,因为这是不可能的。

于 2020-05-09T22:03:02.977 回答