복붙노트

[RUBY-ON-RAILS] 이미지 사용 루비와 같은 base64로 문자열을 저장하는 방법

RUBY-ON-RAILS

이미지 사용 루비와 같은 base64로 문자열을 저장하는 방법

나는 시스템을 출하 USPS 내 루비 레일에 응용 프로그램을 통합하고있다. 당신이 우표 요청을하면 해당 우편 요금을 지불하고는 환불 불가입니다.

우표 요청은 당신에게 발송 라벨입니다 base64로 문자열을 포함하는 XML 응답을 반환합니다.

그러나 나는 (지불 그것이 내가 뭔가 세대 사이의 운송 라벨에 발생하는 경우 내 서버의 이미지로 그 base64로 문자열을 저장할 수 있도록하고 싶습니다, 잘못 될 수 있도록, 뷰에서 발송 라벨을 렌더링 할 수 있어요 그것은) 및 우편을 위해이 새로운 하나를 구입하지 않고 다시 인쇄 할 수 있도록.

다음과 같이 내 첫번째 생각은했다

# Attempt 1
File.open('shipping_label.gif', 'w+') {|f|
    f.puts Base64.decode64(base_64_encoded_data)
}

# Attempt 2
File.open('shipping_label.gif', 'w+') {|f|
    f.puts Base64.decode64(Base64.decode64(base_64_encoded_data))
}

어느 작품.

해결법

  1. ==============================

    1.IO 번호 둔다을 사용하여, 이미지의 경우와 같은 파일에 바이너리 데이터를 기록 할 때 위험과 최고의 피했다. 당신은 UNIX 또는 OS X와 ​​같은 LF 전용 플랫폼에서 주로 관련이 있지만, Windows와 같은 CRLF 것들에 필수적이다 바이너리 모드로 작성해야한다. # 둔다 IO는 잘못된 파일의 끝에 줄 바꿈을 추가합니다.

    IO 번호 둔다을 사용하여, 이미지의 경우와 같은 파일에 바이너리 데이터를 기록 할 때 위험과 최고의 피했다. 당신은 UNIX 또는 OS X와 ​​같은 LF 전용 플랫폼에서 주로 관련이 있지만, Windows와 같은 CRLF 것들에 필수적이다 바이너리 모드로 작성해야한다. # 둔다 IO는 잘못된 파일의 끝에 줄 바꿈을 추가합니다.

    가장 좋은 방법은 공모에 올바른 플래그를 지정하는 것입니다 :

    File.open('shipping_label.gif', 'wb') do |f|
      f.write(Base64.decode64(base_64_encoded_data))
    end
    

    예를 들어, IO 번호 열려있는 문서 페이지에 주석을 참조하십시오

    http://apidock.com/ruby/IO/open/class

  2. ==============================

    2.다른 대답은 아주 가까이 있지만, 일반적으로 그 base64로 스트림은 PNG의 데이터가 포함됩니다 가정합니다. 내가 올바른 파일 확장자를 설정하기 위해 라이브러리 마임 타입을 사용하는 것이 좋습니다 그래서 항상 그런 것은 아니다 :

    다른 대답은 아주 가까이 있지만, 일반적으로 그 base64로 스트림은 PNG의 데이터가 포함됩니다 가정합니다. 내가 올바른 파일 확장자를 설정하기 위해 라이브러리 마임 타입을 사용하는 것이 좋습니다 그래서 항상 그런 것은 아니다 :

    REGEXP = /\Adata:([-\w]+\/[-\w\+\.]+)?;base64,(.*)/m
    
    data_uri_parts = data_url.match(REGEXP) || []
    extension = MIME::Types[data_uri_parts[1]].first.preferred_extension
    file_name = "myfilename.#{extension}"
    
    File.open(file_name, 'wb') do |file|
        file.write(Base64.decode64(data_uri_parts[2]))
    end
    
  3. ==============================

    3.

    require 'RMagick'
    data = params[:image_text]# code like this  data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABPUAAAI9CAYAAABSTE0XAAAgAElEQVR4Xuy9SXPjytKm6ZwnUbNyHs7Jc7/VV9bW1WXWi9q
    image_data = Base64.decode64(data['data:image/png;base64,'.length .. -1])
    new_file=File.new("somefilename.png", 'wb')
    new_file.write(image_data)
    

    사진 모델에서 클립을 사용하여 #save : 당신은 파일 Photo.new (영상 이미지)로 이미지를 사용할 칸 후

  4. ==============================

    4.당신이 이미지에 기록해야하는 경우 다음 rmagick 보석을 통해 ImageMagick를 사용합니다.

    당신이 이미지에 기록해야하는 경우 다음 rmagick 보석을 통해 ImageMagick를 사용합니다.

    http://rmagick.rubyforge.org/

  5. from https://stackoverflow.com/questions/1160741/how-to-save-a-base64-string-as-an-image-using-ruby by cc-by-sa and MIT license