I want to upload files to Google Cloud Storage (Bucket) through my PHP or JavaScript application which is hosted in my localhost or external server.
As I tried the Goog
In order to upload files to Google Cloud Storage from outside of App Engine or from your external server you have to install the client library of the programming language you use.
Step 1:
Create a Google Service Account Key from the below URL and download the json file which has all of your crenditial information to login from the client PC.
https://console.cloud.google.com/apis/credentials
Step 2:
Install
composer require google/cloud-storage
$projectId,
'keyFilePath' => 'service_account_key_json_file.json'
]);
# The name for the bucket
$bucket = $storage->bucket('bucket_name');
foreach ($bucket->objects() as $object) {
echo "https://storage.googleapis.com/".$bucket->name()."/".$object->name().'
';
}
if(isset($_POST['submit'])) {
$file = file_get_contents($_FILES['file']['tmp_name']);
$objectName = $_FILES["file"]["name"];
$object = $bucket->upload($file, [
'name' => $objectName
]);
echo "https://storage.googleapis.com/".$bucket->name()."/".$objectname;
}
?>
Install
npm install --save @google-cloud/storage
'use strict';
const express = require('express');
const formidable = require('formidable');
const fs = require('fs');
const path = require('path');
const { Storage } = require('@google-cloud/storage');
const Multer = require('multer');
const CLOUD_BUCKET = process.env.GCLOUD_STORAGE_BUCKET || 'bucket_name';
const PROJECT_ID = process.env.GCLOUD_STORAGE_BUCKET || 'project_id';
const KEY_FILE = process.env.GCLOUD_KEY_FILE || 'service_account_key_file.json';
const PORT = process.env.PORT || 8080;
const storage = new Storage({
projectId: PROJECT_ID,
keyFilename: KEY_FILE
});
const bucket = storage.bucket(CLOUD_BUCKET);
const multer = Multer({
storage: Multer.MemoryStorage,
limits: {
fileSize: 2 * 1024 * 1024 // no larger than 5mb
}
});
const app = express();
app.use('/blog', express.static('blog/dist'));
app.get('/', async (req, res) => {
console.log(process.env);
const [files] = await bucket.getFiles();
res.writeHead(200, { 'Content-Type': 'text/html' });
files.forEach(file => {
res.write(`* ${file.name}`);
console.log(file.name);
});
return res.end();
});
app.get("/gupload", (req, res) => {
res.sendFile(path.join(`${__dirname}/index.html`));
});
// Process the file upload and upload to Google Cloud Storage.
app.post("/pupload", multer.single("file"), (req, res, next) => {
if (!req.file) {
res.status(400).send("No file uploaded.");
return;
}
// Create a new blob in the bucket and upload the file data.
const blob = bucket.file(req.file.originalname);
// Make sure to set the contentType metadata for the browser to be able
// to render the image instead of downloading the file (default behavior)
const blobStream = blob.createWriteStream({
metadata: {
contentType: req.file.mimetype
}
});
blobStream.on("error", err => {
next(err);
return;
});
blobStream.on("finish", () => {
// The public URL can be used to directly access the file via HTTP.
const publicUrl = `https://storage.googleapis.com/${bucket.name}/${blob.name}`;
// Make the image public to the web (since we'll be displaying it in browser)
blob.makePublic().then(() => {
res.status(200).send(`Success!\n Image uploaded to ${publicUrl}`);
});
});
blobStream.end(req.file.buffer);
});
// Start the server
app.listen(PORT, () => {
console.log(`App listening on port ${PORT}`);
console.log('Press Ctrl+C to quit.');
});
Refer example https://github.com/aslamanver/google-cloud-nodejs-client