Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当下载一张用Carrierwave上传到S3的图片时,我得到一张空白的图片_Ruby On Rails_Carrierwave_Fog - Fatal编程技术网

Ruby on rails 当下载一张用Carrierwave上传到S3的图片时,我得到一张空白的图片

Ruby on rails 当下载一张用Carrierwave上传到S3的图片时,我得到一张空白的图片,ruby-on-rails,carrierwave,fog,Ruby On Rails,Carrierwave,Fog,在我的应用程序中,我使用carrierwave和fog将图像上传到S3。在该网站上,人们可以选择尺寸并下载照片。当他们单击下载时,程序将使用image magick根据所选大小调整图像大小,然后将其发送给用户。它可以找到并发送文件。但问题是当我打开图像时,它是空白的!档案里什么都没有。当我在本地服务器上测试它时,它可以工作,但在生产环境中就不行了。以下是发送下载的操作: def download @photo = Photo.friendly.find(params[:photo_id]

在我的应用程序中,我使用carrierwave和fog将图像上传到S3。在该网站上,人们可以选择尺寸并下载照片。当他们单击下载时,程序将使用image magick根据所选大小调整图像大小,然后将其发送给用户。它可以找到并发送文件。但问题是当我打开图像时,它是空白的!档案里什么都没有。当我在本地服务器上测试它时,它可以工作,但在生产环境中就不行了。以下是发送下载的操作:

def download
    @photo = Photo.friendly.find(params[:photo_id])
    if @photo.free?
        if params[:size].present?
            size = Size.find(params[:size])

            @photo.file.cache_stored_file!
            img = Magick::Image.read(@photo.file.file.file).first
            img.resize!(size.width, size.height)

            filename = "#{size.width}x#{size.height}-#{@photo.file.file.filename}"

            path = "#{Rails.root}/tempfreedownload/#{filename}"
            File.write(path, '')
            img.write path

            File.open(path, 'r') do |f|
                send_data f.read, type: 'image/png', filename: filename
            end

            File.delete(path)
            img.destroy!

            downloads = @photo.downloads + 1
            @photo.update_attribute(:downloads, downloads)
        else

        end

    else
        render file: "#{Rails.root}/public/404.html", layout: false, status: 404
    end
end

可能会出现什么问题?

通常的最佳做法是有一组预定义的大小,并让Carrierwave在上传该文件时调整大小,而不是作为一个即时调整器。这是否适用于你的应用程序?不适用于我的应用程序:-(它计算出每张照片的一组尺寸。基本上得到宽度和偏差5。因此尺寸是动态的