我正在开发将图像发送到服务器的应用程序。所有图像名称必须以扫描的代码(条形码或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码名称
答案 0 :(得分:2)
在我看来,在文件名中使用斜杠是个坏主意,因为Linux和Android文件系统不允许在文件名中使用这些字符。它也可能在服务器端引起严重问题。
我认为在这种情况下应该更改服务器要求。
答案 1 :(得分:1)
文件名包含斜杠/
正在引发异常,因为此char是为目录保留的,可能会替换为∕
,看起来像/
,或Character 'DIVISION SLASH' (U+2215)看起来像MIX_ENV=prod mix phoenix.server
。
答案 2 :(得分:1)
在我看来,您实际上并不需要首先使用QR的网址命名您的图像,这只是您设计解决方案的方式,但您最初的问题可能从未涉及到通过它自己。 最重要的是,您没有考虑代码中的任何https://。
继续请求:
" /"是用于分隔文件系统路径中的文件夹的字符,您不能将任何文件放入文件名中。
对网址进行编码,这样您就无法获得" /"但是"%2F"