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
'Program Tip' 카테고리의 다른 글
Visual Studio에서 KeyDown 이벤트, KeyPress 이벤트 및 KeyUp 이벤트의 차이점 (0) | 2020.12.14 |
---|---|
\ n이 포함 된 Python 스트립 (0) | 2020.12.14 |
IIS 용 PHP 관리자가 설치되지 않음 (0) | 2020.12.14 |
자바에서 더블 라운드 (0) | 2020.12.14 |
주석으로 IntelliJ IDEA에서 중복 경고를 억제합니다. (0) | 2020.12.14 |