<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>Quân Nguyễn, Author at Tomoshare</title>
	<atom:link href="https://blog.tomosia.com.vn/author/quannguyen/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.tomosia.com.vn/author/quannguyen/</link>
	<description>Kênh chia sẻ kiến thức Tomosia Việt Nam</description>
	<lastBuildDate>Thu, 28 Dec 2023 03:25:10 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.tomosia.com.vn/wp-content/uploads/2023/09/cropped-icon-32x32.png</url>
	<title>Quân Nguyễn, Author at Tomoshare</title>
	<link>https://blog.tomosia.com.vn/author/quannguyen/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Upload file lên Amazon S3 bằng carrierwave</title>
		<link>https://blog.tomosia.com.vn/upload-file-len-amazon-s3-bang-carrierwave/</link>
					<comments>https://blog.tomosia.com.vn/upload-file-len-amazon-s3-bang-carrierwave/#comments</comments>
		
		<dc:creator><![CDATA[Quân Nguyễn]]></dc:creator>
		<pubDate>Thu, 28 Dec 2023 03:25:03 +0000</pubDate>
				<category><![CDATA[Ruby]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=1117</guid>

					<description><![CDATA[<p>Với một hệ thống lớn cùng lượng data khổng lồ việc lưu file trực tiếp trên server có&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/upload-file-len-amazon-s3-bang-carrierwave/">Upload file lên Amazon S3 bằng carrierwave</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p class="has-text-align-left" style="line-height:1.5">Với một hệ thống lớn cùng lượng data khổng lồ việc lưu file trực tiếp trên server có thể gặp khó khăn vì giới hạn bộ nhớ. Sử dụng dịch vụ lưu trữ tệp trực tuyến như Amazon S3 là giải pháp hữu hiệu cho vấn đề này. Và xem chúng ta có gì nào, carrierwave, một thư viện Ruby được dùng phổ biến hỗ trợ upload files một cách dễ dàng.</p>
</div></div>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="512" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-40-1024x512.png" alt="" class="wp-image-1166" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-40-1024x512.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-40-300x150.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-40-768x384.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-40-380x190.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-40-800x400.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-40-1160x580.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/10/image-40.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div class="wp-block-group" style="padding-top:0;padding-right:0;padding-bottom:0;padding-left:0"><div class="wp-block-group__inner-container is-layout-constrained wp-container-core-group-is-layout-c6b4b7cd wp-block-group-is-layout-constrained">
<p style="line-height:1.5">Đừng lo lắng nếu bro không có account AWS, hãy tham khảo bài viết dưới link này để giả lập môi trường AWS phía local nhé. Shout-out cho người thầy của tui 😗<br><a href="http://blog.tomosia.com.vn/su-dung-localstack-de-gia-lap-upload-file-s3/">http://blog.tomosia.com.vn/su-dung-localstack-de-gia-lap-upload-file-s3/</a></p>



<p>Ok vậy là đầy đủ đồ đạc rùi ae, chiến thôi</p>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>Trước tiên, để sử dụng những công cụ trên hãy add nó vào Gemfile nhé</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="gem 'carrierwave'
gem 'fog-aws'" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">gem </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">carrierwave</span><span style="color: #E9F284">&#39;</span></span>
<span class="line"><span style="color: #F8F8F2">gem </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">fog-aws</span><span style="color: #E9F284">&#39;</span></span></code></pre></div>



<p style="line-height:1.5">Fog AWS được sử dụng để hỗ trợ Amazon S3. Hãy chắc chắn rằng bạn có nó trong Gemfile của mình</p>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p>Và đừng quên bundle để cài đặt chúng</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="bundle install" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">bundle install</span></span></code></pre></div>
</div></div>



<p>Giả sử bạn đang cần upload avatar cho user</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="class User &lt; ActiveRecord::Base
  mount_uploader :avatar, AvatarUploader
end" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">class</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">User</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">&lt;</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">ActiveRecord::Base</span></span>
<span class="line"><span style="color: #F8F8F2">  mount_uploader </span><span style="color: #BD93F9">:avatar</span><span style="color: #F8F8F2">, </span><span style="color: #BD93F9">AvatarUploader</span></span>
<span class="line"><span style="color: #FF79C6">end</span></span></code></pre></div>



<p>Tiếp theo hãy tạo file uploader cho nó</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="class AvatarUploader &lt; CarrierWave::Uploader::Base
  storage :fog
end" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #FF79C6">class</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD">AvatarUploader</span><span style="color: #F8F8F2"> </span><span style="color: #FF79C6">&lt;</span><span style="color: #F8F8F2"> </span><span style="color: #8BE9FD; font-style: italic">CarrierWave::Uploader::Base</span></span>
<span class="line"><span style="color: #F8F8F2">  storage </span><span style="color: #BD93F9">:fog</span></span>
<span class="line"><span style="color: #FF79C6">end</span></span></code></pre></div>



<p style="line-height:1.5">Để biết thêm về nhiều loại ma thuật khác như thay đổi tên file hay folder chứa, vân vân và mây mây ae có thể xem tại đây <br><a href="https://github.com/carrierwaveuploader/carrierwave">https://github.com/carrierwaveuploader/carrierwave</a></p>



<p>Tạo file carrierwave.rb trong config/initializers và cấu hình credentials</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282A36"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="CarrierWave.configure do |config|
  config.fog_credentials = {
    provider: 'AWS',
    aws_access_key_id: 'S3_AWS_ACCESS_KEY_ID',
    aws_secret_access_key: 'S3_AWS_SECRET_ACCESS_KEY',
    region: 'us-east-1'
  }
  config.fog_directory = 'BUCKET_NAME'
end" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #8BE9FD; font-style: italic">CarrierWave</span><span style="color: #F8F8F2">.configure </span><span style="color: #FF79C6">do</span><span style="color: #F8F8F2"> |config|</span></span>
<span class="line"><span style="color: #F8F8F2">  config.fog_credentials </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> {</span></span>
<span class="line"><span style="color: #F8F8F2">    provider</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">AWS</span><span style="color: #E9F284">&#39;</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">    aws_access_key_id</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">S3_AWS_ACCESS_KEY_ID</span><span style="color: #E9F284">&#39;</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">    aws_secret_access_key</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">S3_AWS_SECRET_ACCESS_KEY</span><span style="color: #E9F284">&#39;</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">    region</span><span style="color: #FF79C6">:</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">us-east-1</span><span style="color: #E9F284">&#39;</span></span>
<span class="line"><span style="color: #F8F8F2">  }</span></span>
<span class="line"><span style="color: #F8F8F2">  config.fog_directory </span><span style="color: #FF79C6">=</span><span style="color: #F8F8F2"> </span><span style="color: #E9F284">&#39;</span><span style="color: #F1FA8C">BUCKET_NAME</span><span style="color: #E9F284">&#39;</span></span>
<span class="line"><span style="color: #FF79C6">end</span></span></code></pre></div>



<p style="line-height:1.5">There u go, giờ thì ae có thể upload file lên S3 r. Quá ư là đơn giản và dễ hiểu phải không 🐧🐧</p>
<p>The post <a href="https://blog.tomosia.com.vn/upload-file-len-amazon-s3-bang-carrierwave/">Upload file lên Amazon S3 bằng carrierwave</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/upload-file-len-amazon-s3-bang-carrierwave/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
