2016-05-18 20 views
0

我正在開發將圖像發送到服務器的應用程序。所有圖像名稱必須以掃描代碼(條形碼或QR碼)+ 5個隨機數字開頭。 Everthing正常工作,如果我掃描條形碼與數字。但是,如果我掃描QR碼至少包含斜線字符/,那麼我的應用會爆炸。 如果我解析掃描的QR碼,並用_替換/再次一切正常。如果名稱包含斜線,則圖像保存不起作用

這是代碼,其中i生成圖像文件

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; 
} 

這是代碼,其中i生成圖像名。替換字符的部分可以被註釋。

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; 
} 

我需要用斜槓

+0

您是否嘗試過重命名Windows中的文件/ Linux並把斜槓放入文件名? – helleye

回答

2

在我看來,這是不好的主意,用在文件名斜線,因爲Linux和Android的文件系統不允許在文件名使用此角色的全QR碼名。它也可能在服務器端造成嚴重的問題。

我認爲在這種情況下應該改變服務器的要求。

1

在我看來,你並不需要首先用QR的URL來命名你的圖像,這就是你設計解決方案的方式,但是你最初的問題可能從來沒有涉及到它本身。 最重要的是,你沒有考慮到任何以你的代碼開頭的https://。

留在你的要求:

  • 爲什麼你不能做到這一點:

「/」是在文件系統中的路徑單獨的文件夾的角色,你不能把任何一個文件名。

  • 你可以用最小的變化做些什麼:

編碼的網址,這樣你就不會得到「/」,而是「%2F」

相關問題