File storage not working. Laravel 5 - laravel

I'm trying to save a .txt file in a folder named txts inside my public folder but the method i'm using is not working:
$txt_nombre = 'nomina_'. $extras['desde'] .'_'. $extras['hasta'] .'.txt';
$txt_contenido = '';
foreach ($personal as $per) {
$txt_cadena = 'BNC ' . $per->cuenta_nomina . ' ' . $per->netos . ' ' . $per->cedula_identidad;
$txt_contenido .= $txt_cadena . "\n";
}
Storage::put('public/txts/'. $txt_nombre, $txt_contenido);
It doesn't even throw an error, my function keeps running but the file is not being saved. Any idea why?

According to the Documentation
By default, the public disk uses the local driver and stores these files in storage/app/public.
Looking at your code, assuming that you haven't changed default configuration, your file should be created in storage/app/public/public/txts/ folder.
I am not sure how Laravel's Storage abstraction handles non-existing folders so you might want, for test, try using just Storage::put('file.txt', "content") and see if it's being created in storage/app/public folder

Related

Delete file in Laravel using Google Drive API

I'm using this command to upload the file to Google Drive (store function in controller):
$request->anexo->storeAs('1tD*******************-6', $file_name, 'google');
And this to get the link:
$link = Storage::disk('google')->url('1tD*******************-6/' . $file_name);
This is working fine. But when i try to delete the file i can't find it in the destroy function in the same controller. I've tried the commands below and all of them return false:
$att = OrdemAttachment::findOrFail($id);
$link = Storage::disk('google')->url('1tD*******************-6/' . $att->file_name);
// dd($link);
$exists = Storage::disk('google')->has('1tD*******************-6/' . $att->file_name);
// dd($exists);
$delete = Storage::disk('google')->delete('1tD*******************-6/' . $att->file_name);
// dd($delete);
Is there another command that must be used instead of these?
I figured it out, I was trying to use the file name and even tried to use the google drive link. But what worked was using the file id (you can find the id inside the link). So, for example, if the link to the file is https://drive.google.com/uc?id=1AgF87s1lw9TSsRhVOpGNJ2K6wq3A8FzD&export=media, to delete the file in google drive with the id would go like this:
$delete = Storage::disk('google')->delete('1tD*******************-6/1AgF87s1lw9TSsRhVOpGNJ2K6wq3A8FzD');
1tD*******************-6 is the subfolder id and 1AgF87s1lw9TSsRhVOpGNJ2K6wq3A8FzD is the id of the file extracted from the link.

Get the file from directory

I'm trying to get all files from a directory and store it inside a variable the process is like When I upload a file,i store it inside a variable ,in this scenario the process will be same but i wont uploading anything , I will be directly sending those files ,
Any help would be much appreciated
This what I tried
$dir = public_path('dbf');
// $new_path = public_path('new_files');
$files1 = scandir($dir);
$count=count($files1);
for($i=1;$i<$count;$i++)
{
$file=$files1[$i];
if($files1[$i]!='.' && $files1[$i]!='..')
{
$data=file_get_contents($dir.'/'.$file);
$name=$data->getClientOriginalName;
echo $name;
}
}
Its showing me error
Trying to get property 'getClientOriginalName' of non-object
Please solve this for me
inside that folder there is a file named cams_transaction.dbf
content of that file

Storage/File delete methods don't delete the file from storage

I am uploading images to storage/uploads and have a queue job that uploads those images to AWS. Here is the code of the job:
$path = storage_path() . '/uploads/' . $this->fileId;
$fileName = $this->fileId . '.png';
if (Storage::disk('s3images')->put('profile/' . $fileName, fopen($path, 'r+'))) {
File::delete($path);
}
Once the image has been uploaded to AWS the job is supposed to delete the image from storage/uploads but it's not doing that. The images are successfully uploaded to AWS. I tried to delete specific files directly without the if-statement but nothing seems to work. I even tried with Storage::delete but that didn't work either. Could someone point me in the right direction please?
You may use
Storage::delete('upload/profile/' . $fileName);
See Documentation
If your specifying the full directory path of the file you can use unlink a native way to delete files from the server.
$path = storage_path() . '/uploads/' . $this->fileId;
$fileName = $this->fileId . '.png';
$isUploaded = Storage::disk('s3images')->put('profile/' . $fileName, fopen($path, 'r+'));
if ($isUploaded) {
unlink($path);
}
Documentation: unlink php

Error while uploading in Laravel 4

I'm trying to make a image upload in lavarel 4. The upload passes by
The file "C:\xampp\tmp\phpD1F3.tmp" does not exist
This is my upload code :
$file = Input::file('image');
// Get extension
$extension =$file->getClientOriginalExtension();
// Generate a file name
$fileName = 'pool' . Str::quickRandom();
$fileNameExtension = $fileName . '.' . $extension;
// Process upload
Input::file('image')->move(public_path() . '/uploads/images/app/pools/original/', $fileNameExtension);
`
I don't know why i get this error , please can anyone help me to solve this?
You are probably making some operations on "uploaded" file after moving it to server by move() function. Please make sure there is no operation made on temporary file after calling Input::file('image')->move() function.

Locking specific cells with a password phpExcel

I am uploading an excel file from a folder in my computer to a folder in the server, after the upload i am loading the uploaded file so that i can protect certain cell, the first method i used below does not work at all
function LockCertainCells(){
$labref= $this->uri->segment(3);
$objReader = new PHPExcel_Reader_Excel2007();
$path = "analyst_uploads/" . date('Y') . '/' . date('M') . '/'. $labref .'/'. $labref . ".xlsx";
$objPHPExcel = $objReader->load($path);
$objPHPExcel->setActiveSheetIndexbyName('Sample Summary');
$objPHPExcel->getActiveSheet()->protectCells('A17:G85','PHPExcel');
$objPHPExcel ->getActiveSheet()->getProtection()->setSheet(true);
}
This second one
function LockCertainCells(){
$labref= $this->uri->segment(3);
$objPHPExcel = new PHPExcel;
$path = "analyst_uploads/" . date('Y') . '/' . date('M') . '/'. $labref .'/'. $labref . ".xlsx";
$objSheet = $objPHPExcel->load($path);
$objSheet->setActiveSheetIndexbyName('Sample Summary');
$objSheet->protectCells('A17:G85', 'PHP');
$objSheet->getProtection()->setSheet(true);
}
Throws me this error:
Fatal error: Call to undefined method PHPExcel::load() in C:\127.0.0.1\htdocs\NQCL\.....
suggestions!
The PHPExcel class doesn't have a load method, which is precisely why you get that error.... the first method is the method provided by the PHPExcel library for loading a file into a PHPExcel object, the second is not. Use the method that works (and is the method described in all the documentation); not the one that doesn't exist.
The first method for locking the cells isn't doing anything with the PHPExcel object (such as saving it) after you have set cell protection; so as soon as the LockCertainCells function terminates, it will be out of scope and discarded by the PHP script. If you want to make the changes in the file, you need to save the file again. I believe that MS Excel itself requires you to save a file if you want to make any changes to that file permanent.
EDIT
You also miss setting the password for the protected cells:
$objSheet->getProtection()->setPassword('mypassword');

Resources