如果名称包含斜杠

时间:2016-05-18 09:54:47

标签: android

我正在开发将图像发送到服务器的应用程序。所有图像名称必须以扫描的代码(条形码或QR码)+ 5个随机数开头。 如果我用数字扫描条形码,Everthing工作正常。但是,如果我扫描包含斜线字符/的QR码,那么我的应用程序会爆炸。 如果我解析扫描的QR码并再次将/替换为_,一切正常。

这是我生成图像文件的代码

private File createImageFile() throws IOException {

    imageName = generateImageName();
    File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(imageName, ".png", storageDir);
    mCurrentPhotoPath = image.getPath();

    mImageNameList.add(imageName);
    return image;
}

这是我生成图像名称的代码。可以评论替换字符的部分。

public String generateImageName() {

    int randomNumber = randomGenerator.nextInt((99999 - 100) + 1) + 100;
    // Image name generator
    if (mCodeContent.contains("http://")) {
        mCodeContent = mCodeContent.replace("http://", "");
    }
    if (mCodeContent.contains("/")) {
        mCodeContent = mCodeContent.replace("/", "_");
    }
    imageName = mCodeContent + "_" + Integer.toString(randomNumber) + ".png";
    return imageName;
}

我需要带有斜杠的完整QR码名称

3 个答案:

答案 0 :(得分:2)

在我看来,在文件名中使用斜杠是个坏主意,因为Linux和Android文件系统不允许在文件名中使用这些字符。它也可能在服务器端引起严重问题。

我认为在这种情况下应该更改服务器要求。

答案 1 :(得分:1)

文件名包含斜杠/正在引发异常,因为此char是为目录保留的,可能会替换为,看起来像,或Character 'DIVISION SLASH' (U+2215)看起来像MIX_ENV=prod mix phoenix.server

答案 2 :(得分:1)

在我看来,您实际上并不需要首先使用QR的网址命名您的图像,这只是您设计解决方案的方式,但您最初的问题可能从未涉及到通过它自己。 最重要的是,您没有考虑代码中的任何https://。

继续请求:

  • 为什么你不能这样做:

" /"是用于分隔文件系统路径中的文件夹的字符,您不能将任何文件放入文件名中。

  • 您可以通过最小的改变做些什么:

对网址进行编码,这样您就无法获得" /"但是"%2F"