Mam identyfikator URI danych otrzymuję od javascript i próbuję zapisać przez php. Używam następującego kodu, który daje pozornie uszkodzony plik obrazu:PHP Data-URI do pliku
$data = $_POST['logoImage'];
$uri = substr($data,strpos($data,",")+1);
file_put_contents($_POST['logoFilename'], base64_decode($uri));
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs 9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAxklEQVQYlYWQMW7CUBBE33yITYUUmwbOkBtEcgUlTa7COXIVV5RUkXKC5AxU EdyZVD4kyKxkwIrr9vd0c7Oih aopinLNsF6Qkg2XW4XJ7LGFsAAcTV6lF5/jLdbALA9XDAXYfthFQVx OrmqKYK88/7rbbMFksALieTnzu9wDYTj6f70PKsp2kwAiSvjXNcvkWpAfNZkzWa/5a9yT7fdoX7rrB7hYh2fXo9HdjPYQZu3MIU8bYIlW20y0RUlXG2Kpv/vfwLxhTaSQwWqwhAAAAAElFTkSuQmCC
Poniżej kodu znajduje się rzeczywisty obraz jako URI danych. "logoImage" to powyższy łańcuch, a $ uri to ciąg minus "image/jpeg; base64".
Przepraszam ja zrobić literówkę gdzieś? – GAgnew
Identyfikator URI danych w twoim przykładzie nie jest prawidłowym obrazem PNG. To nigdy nie zadziała i nie ma związku z kodem, jest powiązane z danymi. – hakre
Możesz chcieć zachować to jako obraz base64. Zgaduję, ponieważ nie jestem ekspertem binarnym, że wszystkie podane tu przykłady dają wynik 32-bitowy. Począwszy od PHP 5.2, adresy URL danych powinny działać, więc rozwiązanie może być tak proste jak: 'file_put_contents ('logo.png', preg_replace (/ \ s + /, '+', $ _POST ['logoImage']))' jeśli używasz JavaScript FileReader API w połączeniu z AJAX. – PHPglue