Program Tip

Rails에서 오류없이 파일을 삭제하는 방법

programtip 2020. 12. 14. 20:45
반응형

Rails에서 오류없이 파일을 삭제하는 방법


사용자가 웹 캠으로 프로필 사진을 찍을 수 있도록 JPEGCAM을 사용하고 있습니다. 이렇게하면 임시 파일이 업로드됩니다.

def ajax_photo_upload    
  File.open(upload_path, 'w:ASCII-8BIT') do |f|
    f.write request.raw_post
  end
  # @user.photo = File.open(upload_path)
  @user.assign_attributes(
    :photo => File.open(upload_path),
    :orig_filename => "#{current_user.full_name}.jpg"
  )
  if @user.save
  respond_to do |format|
  .....
private

  def upload_path # is used in upload and create
    file_name = session[:session_id].to_s + '.jpg'
    File.join(::Rails.root.to_s, 'public', 'temp', file_name)
  end

이 임시 파일을 안전하게 삭제하는 가장 좋은 방법은 무엇입니까? 감사


파일 작업이 완료되었음을 알게되면 :

File.delete(path_to_file) if File.exist?(path_to_file)

또 다른 한 가지 : 열어 본 파일을 항상 닫아야합니다. 운영 체제는 특정 개수의 열린 파일 / 파일 설명 자만 처리 할 수 ​​있으며이 제한을 통과하면 이상한 버그가 발생할 수 있습니다. Ruby에서 파일을 열려면 항상 블록 형식을 사용하십시오.

File.open(path) do |f|
  # ...
end

Ruby가 자동으로 파일을 닫습니다. 블록 형식을 사용할 수없는 경우 파일을 직접 닫아야합니다.

f = File.open(path)
# ...
f.close

따라서 전달하는 파일을 닫으십시오 @user.assign_attributes(...)...


완료되었다고 확신하는 경우 FileUtils.rm또는 사용하지 않는 이유는 FileUtils.rm_f무엇입니까?

FileUtils.rm_f(upload_path)

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/fileutils/rdoc/FileUtils.html#method-c-rm_f

Rails에서 이것을 무시할 수 있으며, 이러한 임시 파일과 일치하는 임시 디렉토리에서 하루보다 오래된 파일을 깨우고 삭제하는 크론을 가질 수 있습니다. 파일 재 처리에 실패하면 오류가 발생할 수 있다는 이점이 있습니다 (즉시 관리하지 않음). Rails의 요청 / 응답 루프에서 파일 작업이 수행되지 않아 조금 더 빠르게 응답합니다.

참고 URL : https://stackoverflow.com/questions/12808988/rails-how-to-delete-a-file-without-failing-on-error

반응형