AnA*_*ice 57 ruby ruby-on-rails ruby-on-rails-3
我正在使用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
Run Code Online (Sandbox Code Playgroud)
安全删除此临时文件的最佳方法是什么?谢谢
sev*_*rin 115
当您知道自己已完成该文件时:
File.delete(path_to_file) if File.exist?(path_to_file)
Run Code Online (Sandbox Code Playgroud)
另一件事:确保您始终关闭已打开的文件,操作系统只能处理一定数量的打开文件/文件描述符,当您通过该限制时,您可能会遇到奇怪的错误...所以当你想要在Ruby中打开文件总是使用块形式:
File.open(path) do |f|
# ...
end
Run Code Online (Sandbox Code Playgroud)
和Ruby会自动关闭文件.如果阻止表单不可用,则必须自己关闭文件:
f = File.open(path)
# ...
f.close
Run Code Online (Sandbox Code Playgroud)
所以一定要关闭你传递给的文件@user.assign_attributes(...)......
And*_*icz 29
如果您确定已完成它,为什么不使用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中忽略它,并让一个cron唤醒并从temp目录中删除与这些临时文件匹配的一天以前的文件.如果文件无法重新处理,那么这会带来一些错误的好处 - 您不会立即执行此操作 - 并且Rails的请求/响应循环上的文件操作不会完成,然后会更快地响应.
| 归档时间: |
|
| 查看次数: |
49481 次 |
| 最近记录: |