Zamiast korzystać z Regexp
, można również skorzystać z prostego String#index metody.
Zwraca indeks pierwszego występowania danego fragmentu lub typu (regexp) na str. Zwraca zero, jeśli nie znaleziono.
Jeśli masz dość rozsądny źródło danych (np JavaScript na .toDataURL()
na canvas
), można powołać się na fakt, że wspólne MIMETYPES nie może zawierać przecinków.
dataURL = "data:image/png;base64,iVBOR...."
start = dataURL.index(',') + 1 # .index used here
x = Base64.decode64 dataURL[start..-1]
File.open('test.png','wb') {|file| file.write x}
Jeśli pracujesz z free-form przesyłania plików użytkownika, pamiętaj, że kilka rzadkie typy MIME nie zawierają przecinki (np .: text/x-java-source,java
). Można użyć bardziej konserwatywny:
start = dataURL.index(';base64,') + 8
Jeśli nie wiem, czy masz prefiksu base64 lub URL base64 danych, można użyć #index
jako test:
start = dataURL.index ';base64,'
dataURL = dataURL[(start+8)..-1] if start
x = Base64.decode64 dataURL
Pardon mój włamań: na wszelki wypadek przyjechałeś tutaj (tak jak ja) szukając base64 PNG * kodować * oneliner w ruby: '" dane: image/png; base64, "+ Base64.strict_encode64 (File.read (" test.png "))' - carry na. :) –