Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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 可以直接从S3桶创建回形针附件吗?_Ruby On Rails_Amazon S3_Paperclip - Fatal编程技术网

Ruby on rails 可以直接从S3桶创建回形针附件吗?

Ruby on rails 可以直接从S3桶创建回形针附件吗?,ruby-on-rails,amazon-s3,paperclip,Ruby On Rails,Amazon S3,Paperclip,我有一个Rails应用程序,它通过一个公开的API与一些不同语言的移动应用程序进行交互 移动应用程序必须将视频文件发送到Rails应用程序,但文件太大,无法直接发送到API,无法用回形针连接 1.9.3p194 :069 > u = Attachment.new => #<Attachment id: nil, type: nil, attachable_id: nil, attachable_type: nil, attachment_file_name: nil, att

我有一个Rails应用程序,它通过一个公开的API与一些不同语言的移动应用程序进行交互

移动应用程序必须将视频文件发送到Rails应用程序,但文件太大,无法直接发送到API,无法用回形针连接

1.9.3p194 :069 > u = Attachment.new
 => #<Attachment id: nil, type: nil, attachable_id: nil, attachable_type: nil, attachment_file_name: nil, attachment_content_type: nil, attachment_file_size: nil, attachment_updated_at: nil, created_at: nil, updated_at: nil> 
1.9.3p194 :070 > u.attachment_file_name = 'fdssfd.txt'
 => "fdssfd.txt" 
1.9.3p194 :071 > u.attachment
 => /system/assets/images/paperclip/development//original/fdssfd.txt 
1.9.3p194 :072 > u.save
   (0.3ms)  BEGIN
  SQL (0.5ms)  INSERT INTO `attachments` (`attachable_id`, `attachable_type`, `attachment_content_type`, `attachment_file_name`, `attachment_file_size`, `attachment_updated_at`, `created_at`, `type`, `updated_at`) VALUES (NULL, NULL, NULL, 'fdssfd.txt', NULL, NULL, '2012-09-18 14:24:26', NULL, '2012-09-18 14:24:26')
[paperclip] Saving attachments.
   (1.4ms)  COMMIT
 => true 
1.9.3p194 :073 > u.attachment
 => /system/assets/images/paperclip/development/5/original/fdssfd.txt 
我将文件直接上传到移动设备上的S3,然后使用与回形针附件无关的字段将上传文件的URL发送到API

当Rails控制器收到一个包含upload_url值的创建或更新请求时,我想在指定的位置创建一个带有文件的回形针附件

我知道我可以通过从S3读取文件并再次存储来创建回形针附件,但当S3上的起点和终点相同时,似乎会传输大量不必要的数据


因此,我的问题是,我是否可以使用S3 gem将文件移动或重命名为回形针可以识别的附件?

这取决于您对附件的建模方式(如S3的路径和url方案),但在最常见的情况下,您只需创建具有必要属性(包括文件名)的对象即可应该从upload_url值派生。然后可以访问上传记录,就好像它最初是通过回形针创建的一样

1.9.3p194 :069 > u = Attachment.new
 => #<Attachment id: nil, type: nil, attachable_id: nil, attachable_type: nil, attachment_file_name: nil, attachment_content_type: nil, attachment_file_size: nil, attachment_updated_at: nil, created_at: nil, updated_at: nil> 
1.9.3p194 :070 > u.attachment_file_name = 'fdssfd.txt'
 => "fdssfd.txt" 
1.9.3p194 :071 > u.attachment
 => /system/assets/images/paperclip/development//original/fdssfd.txt 
1.9.3p194 :072 > u.save
   (0.3ms)  BEGIN
  SQL (0.5ms)  INSERT INTO `attachments` (`attachable_id`, `attachable_type`, `attachment_content_type`, `attachment_file_name`, `attachment_file_size`, `attachment_updated_at`, `created_at`, `type`, `updated_at`) VALUES (NULL, NULL, NULL, 'fdssfd.txt', NULL, NULL, '2012-09-18 14:24:26', NULL, '2012-09-18 14:24:26')
[paperclip] Saving attachments.
   (1.4ms)  COMMIT
 => true 
1.9.3p194 :073 > u.attachment
 => /system/assets/images/paperclip/development/5/original/fdssfd.txt 
1.9.3p194:069>u=Attachment.new
=> # 
1.9.3p194:070>u.attachment_file_name='fdssfd.txt'
=>“fdssfd.txt”
1.9.3p194:071>美国附件
=>/system/assets/images/paperclip/development//original/fdssfd.txt
1.9.3p194:072>u.save
(0.3ms)开始
SQL(0.5ms)插入“附件”(“附件id”、“附件类型”、“附件内容类型”、“附件文件名”、“附件文件大小”、“附件更新位置”、“创建位置”、“类型”、“更新位置”)值(NULL、NULL、NULL、NULL、NULL、NULL、fdssfd.txt、NULL、NULL、NULL、2012-09-18 14:24:26、NULL、NULL、2012-09-18 14:24:26)
[回形针]保存附件。
(1.4ms)提交
=>正确
1.9.3p194:073>美国附件
=>/system/assets/images/paperclip/development/5/original/fdssfd.txt

谢谢。这似乎不是一个非常令人满意的解决方案,但它很可能是我唯一的选择,使我不必将数据传输到服务器并返回S3。我会继续查找,但最终可能会出现类似的情况。干杯。你如何将上传文件的url或文件数据放入回形针附件中?