Skip to content
This repository has been archived by the owner on Aug 31, 2022. It is now read-only.

Commit

Permalink
Upload product images to aws s3 #49
Browse files Browse the repository at this point in the history
  • Loading branch information
kkamara committed Jun 15, 2021
1 parent fe8e6fe commit 190e55d
Show file tree
Hide file tree
Showing 6 changed files with 264 additions and 7 deletions.
3 changes: 3 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"

FILESYSTEM_DRIVER=local
AWS_S3_URL=

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
Expand Down
16 changes: 14 additions & 2 deletions app/Helpers/CommonHelper.php
Original file line number Diff line number Diff line change
@@ -1,9 +1,21 @@
<?php

/**
* Returns an alphabetical map of country values with the respective abbreviations as keys.
* Returns an alphabetical map of country values
* with the respective abbreviations as keys.
* @return array
*/
function getCountriesList()
{
return array("AF" => "Afghanistan", "AX" => "Åland Islands","AL" => "Albania","DZ" => "Algeria","AS" => "American Samoa","AD" => "Andorra","AO" => "Angola","AI" => "Anguilla","AQ" => "Antarctica","AG" => "Antigua and Barbuda","AR" => "Argentina","AM" => "Armenia","AW" => "Aruba","AU" => "Australia","AT" => "Austria","AZ" => "Azerbaijan","BS" => "Bahamas","BH" => "Bahrain","BD" => "Bangladesh","BB" => "Barbados","BY" => "Belarus","BE" => "Belgium","BZ" => "Belize","BJ" => "Benin","BM" => "Bermuda","BT" => "Bhutan","BO" => "Bolivia","BA" => "Bosnia and Herzegovina","BW" => "Botswana","BV" => "Bouvet Island","BR" => "Brazil","IO" => "British Indian Ocean Territory","BN" => "Brunei Darussalam","BG" => "Bulgaria","BF" => "Burkina Faso","BI" => "Burundi","KH" => "Cambodia","CM" => "Cameroon","CA" => "Canada","CV" => "Cape Verde","KY" => "Cayman Islands","CF" => "Central African Republic","TD" => "Chad","CL" => "Chile","CN" => "China","CX" => "Christmas Island","CC" => "Cocos (Keeling) Islands","CO" => "Colombia","KM" => "Comoros","CG" => "Congo","CD" => "Congo,The Democratic Republic of The","CK" => "Cook Islands","CR" => "Costa Rica","CI" => "Cote D'ivoire","HR" => "Croatia","CU" => "Cuba","CY" => "Cyprus","CZ" => "Czech Republic","DK" => "Denmark","DJ" => "Djibouti","DM" => "Dominica","DO" => "Dominican Republic","EC" => "Ecuador","EG" => "Egypt","SV" => "El Salvador","GQ" => "Equatorial Guinea","ER" => "Eritrea","EE" => "Estonia","ET" => "Ethiopia","FK" => "Falkland Islands (Malvinas)","FO" => "Faroe Islands","FJ" => "Fiji","FI" => "Finland","FR" => "France","GF" => "French Guiana","PF" => "French Polynesia","TF" => "French Southern Territories","GA" => "Gabon","GM" => "Gambia","GE" => "Georgia","DE" => "Germany","GH" => "Ghana","GI" => "Gibraltar","GR" => "Greece","GL" => "Greenland","GD" => "Grenada","GP" => "Guadeloupe","GU" => "Guam","GT" => "Guatemala","GG" => "Guernsey","GN" => "Guinea","GW" => "Guinea-bissau","GY" => "Guyana","HT" => "Haiti","HM" => "Heard Island and Mcdonald Islands","VA" => "Holy See (Vatican City State)","HN" => "Honduras","HK" => "Hong Kong","HU" => "Hungary","IS" => "Iceland","IN" => "India","ID" => "Indonesia","IR" => "Iran,Islamic Republic of","IQ" => "Iraq","IE" => "Ireland","IM" => "Isle of Man","IL" => "Israel","IT" => "Italy","JM" => "Jamaica","JP" => "Japan","JE" => "Jersey","JO" => "Jordan","KZ" => "Kazakhstan","KE" => "Kenya","KI" => "Kiribati","KP" => "Korea,Democratic People's Republic of","KR" => "Korea,Republic of","KW" => "Kuwait","KG" => "Kyrgyzstan","LA" => "Lao People's Democratic Republic","LV" => "Latvia","LB" => "Lebanon","LS" => "Lesotho","LR" => "Liberia","LY" => "Libyan Arab Jamahiriya","LI" => "Liechtenstein","LT" => "Lithuania","LU" => "Luxembourg","MO" => "Macao","MK" => "Macedonia,The Former Yugoslav Republic of","MG" => "Madagascar","MW" => "Malawi","MY" => "Malaysia","MV" => "Maldives","ML" => "Mali","MT" => "Malta","MH" => "Marshall Islands","MQ" => "Martinique","MR" => "Mauritania","MU" => "Mauritius","YT" => "Mayotte","MX" => "Mexico","FM" => "Micronesia,Federated States of","MD" => "Moldova,Republic of","MC" => "Monaco","MN" => "Mongolia","ME" => "Montenegro","MS" => "Montserrat","MA" => "Morocco","MZ" => "Mozambique","MM" => "Myanmar","NA" => "Namibia","NR" => "Nauru","NP" => "Nepal","NL" => "Netherlands","AN" => "Netherlands Antilles","NC" => "New Caledonia","NZ" => "New Zealand","NI" => "Nicaragua","NE" => "Niger","NG" => "Nigeria","NU" => "Niue","NF" => "Norfolk Island","MP" => "Northern Mariana Islands","NO" => "Norway","OM" => "Oman","PK" => "Pakistan","PW" => "Palau","PS" => "Palestinian Territory,Occupied","PA" => "Panama","PG" => "Papua New Guinea","PY" => "Paraguay","PE" => "Peru","PH" => "Philippines","PN" => "Pitcairn","PL" => "Poland","PT" => "Portugal","PR" => "Puerto Rico","QA" => "Qatar","RE" => "Reunion","RO" => "Romania","RU" => "Russian Federation","RW" => "Rwanda","SH" => "Saint Helena","KN" => "Saint Kitts and Nevis","LC" => "Saint Lucia","PM" => "Saint Pierre and Miquelon","VC" => "Saint Vincent and The Grenadines","WS" => "Samoa","SM" => "San Marino","ST" => "Sao Tome and Principe","SA" => "Saudi Arabia","SN" => "Senegal","RS" => "Serbia","SC" => "Seychelles","SL" => "Sierra Leone","SG" => "Singapore","SK" => "Slovakia","SI" => "Slovenia","SB" => "Solomon Islands","SO" => "Somalia","ZA" => "South Africa","GS" => "South Georgia and The South Sandwich Islands","ES" => "Spain","LK" => "Sri Lanka","SD" => "Sudan","SR" => "Suriname","SJ" => "Svalbard and Jan Mayen","SZ" => "Swaziland","SE" => "Sweden","CH" => "Switzerland","SY" => "Syrian Arab Republic","TW" => "Taiwan,Province of China","TJ" => "Tajikistan","TZ" => "Tanzania,United Republic of","TH" => "Thailand","TL" => "Timor-leste","TG" => "Togo","TK" => "Tokelau","TO" => "Tonga","TT" => "Trinidad and Tobago","TN" => "Tunisia","TR" => "Turkey","TM" => "Turkmenistan","TC" => "Turks and Caicos Islands","TV" => "Tuvalu","UG" => "Uganda","UA" => "Ukraine","AE" => "United Arab Emirates","GB" => "United Kingdom","US" => "United States","UM" => "United States Minor Outlying Islands","UY" => "Uruguay","UZ" => "Uzbekistan","VU" => "Vanuatu","VE" => "Venezuela","VN" => "Viet Nam","VG" => "Virgin Islands,British","VI" => "Virgin Islands,U.S.","WF" => "Wallis and Futuna","EH" => "Western Sahara","YE" => "Yemen","ZM" => "Zambia","ZW" => "Zimbabwe");
}
}

/**
* @return bool
*/
function awsCredsExist() {
return isset($_ENV['AWS_ACCESS_KEY_ID']) &&
isset($_ENV['AWS_SECRET_ACCESS_KEY']) &&
isset($_ENV['AWS_DEFAULT_REGION']) &&
isset($_ENV['AWS_BUCKET']);
}
41 changes: 38 additions & 3 deletions app/Models/Product/Product.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use App\Models\Product\Traits\ProductRelations;
use App\Models\Product\Traits\ProductScopes;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Validator;

class Product extends Model
Expand Down Expand Up @@ -47,7 +48,29 @@ public function getPathAttribute()
*/
public function getImagePathAttribute()
{
return $this->attributes['image_path'] ?? '/image/products/default/not-found.jpg';
$result = '/image/products/default/not-found.jpg';

if (
null !== $this->attributes['image_path'] &&
'/image/products/default/not-found.jpg' !== $this->attributes['image_path'] &&
true === awsCredsExist() &&
true === Storage::disk('s3')->exists($this->attributes['image_path'])
) {
$result = sprintf(
'%s%s',
$_ENV['AWS_S3_URL'],
str_replace(
'//',
'/',
Storage::path($this->attributes['image_path'])
),
);
if (false !== $result) {
return $result;
}
}

return $result;
}

/**
Expand Down Expand Up @@ -144,7 +167,7 @@ public function doesUserOwnProduct()
*/
public function usingDefaultImage()
{
return $this->attributes['image_path'] === NULL;
return $this->attributes['image_path'] === '/image/products/default/not-found.jpg';
}

/**
Expand Down Expand Up @@ -207,14 +230,26 @@ public function uploadImage(Request $request) {
$file = $request->file('image');
$imageName = $file->getClientOriginalName();

/**
* @var string $storagePath
*/
$storagePath = '/uploads/companies/'.$this->company->id.'/images/';

if (true === awsCredsExist()) {
/** Note: aws removes the forwarding slash from $storagePath. */
$result = $file->storePublicly($storagePath, 's3');
if (false !== $result) {
return $result;
}
}

if (
null === $file ||
null === $imageName
) {
return $result;
}

$storagePath = '/uploads/companies/'.$this->company->id.'/images/';
$file->move(public_path($storagePath), $imageName);

$result = $storagePath . $imageName;
Expand Down
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"guzzlehttp/guzzle": "^7.0.1",
"laravel/framework": "^8.40",
"laravel/tinker": "^2.5",
"league/flysystem-aws-s3-v3": "~1.0",
"spatie/laravel-permission": "^4.0"
},
"require-dev": {
Expand Down
206 changes: 204 additions & 2 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions config/cache.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,10 @@
'driver' => 'octane',
],

's3' => [
'driver' => 's3',
],

],

/*
Expand Down

0 comments on commit 190e55d

Please sign in to comment.