2014-11-05 4 views
1

전자 메일을 업로드 할 때 처리 중일 때 전자 메일의 포함 된 이미지에 파일 확장자가 없거나 문자, 숫자 및 특수 문자가 포함 된 확장명이 포함 된 경우가 있습니다 예 : [email protected]). 두 인스턴스가 모두 도착하면이를 무시하고 계속 진행하고 싶습니다. 확장 기능이 없지만 무작위 문자를 처리하는 가장 좋은 방법과 조건문을 작성하는 가장 깨끗한 방법에 대해서는 분명하지 않았습니다. 여기 내가 지금까지 가지고있는 것입니다 :RoR : 공백 처리 및 특수 문자 처리

filename_extension = File.extname(filename) 

if filename_extension.blank? 
       puts "FILENAME EXT IS BLANK" 
    elsif filename_extension #NEED REGEX or something to handle Random? 
      puts "FILENAME EXT IS Random" 
      else #DO PROCESSING 

고마워요.

+0

그래서 특수 문자가있는 항목은 임의로 간주됩니까? – Anthony

+3

IMO 최선의 방법은 "허용"확장명을 명시 적으로 확인하고 "임의"문자의 정확한 형식을 알지 못하는 경우 일치하지 않는 것으로 가정합니다. –

+0

MIME 형식에 의존하지 않는 이유는 무엇입니까? –

답변

0
known_extensions = %w[.csv .rb .rbw .html .htm .css] 
filenames = %w[1.txt 2.csv 3] 
filenames.each do |filename| 
    filename_extension = File.extname(filename) 

    if filename_extension.empty? 
    puts "FILENAME EXT IS BLANK" 
    elsif known_extensions.include? filename_extension 
    puts "FILENAME EXT IS Random" 
    else #DO PROCESSING 
    puts "Processing" 
    end 
end 

문제가 어떤없이 ruby 태그 된 당신에게 blank? 방법을 제공 할 수 있습니다 보석으로 나타냅니다.

'유효하지 않은'확장명은 다소 다양하며 유효한 파일 이름의 의미와 관련이 있습니다. 예를 들어 대부분의 Unix 파일 시스템에서 파일 이름에 대한 유일한 제한은 255 바이트의 파일 이름 크기 제한과 /null의 예약 문자입니다. 사실 유닉스에서 '확장자'에 대해 알고있는 스펙은 없다. 파일 이름의 일부일 뿐이며 파일 이름의 마침표는 유효하며 특별한 것을 의미하지는 않는다. ('숨겨진'파일이어야 함을 나타내는 마침표로 시작하는 파일 이름을 제외하고). Windows 시스템에서는 더 긴 문자 목록이 있으며 그 중 일부는 / : < > ? \ | + , . ; = [ ]과 단일 및 이중 문자입니다 인용 부호. 제 코모도에서는 :, ,=이라고 생각하고 제 Amiga 시스템에서는 ", : 또는 /을 제외한 모든 것을 사용할 수 있습니다.

그래서 '잘못된'확장명은 '유효한'확장명보다 쉽게 ​​일치 할 수 있다고 생각합니다. 레일스를 실제로 사용하고 유닉스에서 호스팅하고 있다면 유효한 확장자 (실제로는 유효한 파일명)를 확인하기 위해 확인해야 할 작은 세트가 있습니다. 귀하의 호스팅 시스템에 잘못된 확장명과 귀하의 프로그램에 대한 유효한 확장이 무엇인지에 대한 귀하의 아이디어로 인해 발생할 수있는 제한을 근거로합니다.

+0

고마워.하지만 .gif @ 01CFA02B.47556390과 같은 것이 아닌 어떤 유효한 확장 물을 허용하는 방법은 무엇입니까? .psd # 1BC2DEF.2010, 등등. – user464180

+0

"유효한 확장자"를 정의하십시오. 첫 번째 예제에서 확장자는'.gif' 또는'.47556390'입니다. 나는 당신이 아닌 다른 누군가가 질문의 태그를 바꾸었지만 당신이 아니기 때문에 당신이 레일스를 사용하지 않을 가능성이 있음을 발견했습니다. 질문을 수정하여 태그의 변경 사항을 확인할 수 있습니까? – vgoff