mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-04 05:47:34 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Invoice Ninja (https://invoiceninja.com).
 | 
						|
 *
 | 
						|
 * @link https://github.com/invoiceninja/invoiceninja source repository
 | 
						|
 *
 | 
						|
 * @copyright Copyright (c) 2024. Invoice Ninja LLC (https://invoiceninja.com)
 | 
						|
 *
 | 
						|
 * @license https://www.elastic.co/licensing/elastic-license
 | 
						|
 */
 | 
						|
 | 
						|
namespace App\Utils;
 | 
						|
 | 
						|
use Illuminate\Http\File;
 | 
						|
use Illuminate\Http\UploadedFile;
 | 
						|
class TempFile
 | 
						|
{
 | 
						|
    public static function path($url): string
 | 
						|
    {
 | 
						|
        $temp_path = @tempnam(sys_get_temp_dir().'/'.sha1(time()), basename($url));
 | 
						|
        copy($url, $temp_path);
 | 
						|
 | 
						|
        return $temp_path;
 | 
						|
    }
 | 
						|
 | 
						|
    /* Downloads a file to temp storage and returns the path - used for mailers */
 | 
						|
    public static function filePath($data, $filename): string
 | 
						|
    {
 | 
						|
        $dir_hash = sys_get_temp_dir().'/'.sha1(microtime());
 | 
						|
 | 
						|
        mkdir($dir_hash);
 | 
						|
 | 
						|
        $file_path = $dir_hash.'/'.$filename;
 | 
						|
 | 
						|
        file_put_contents($file_path, $data);
 | 
						|
 | 
						|
        return $file_path;
 | 
						|
    }
 | 
						|
 | 
						|
    public static function UploadedFileFromRaw(string $fileData, string|null $fileName = null, string|null $mimeType = null): UploadedFile
 | 
						|
    {
 | 
						|
        // Create temp file and get its absolute path
 | 
						|
        $tempFile = tmpfile();
 | 
						|
        $tempFilePath = stream_get_meta_data($tempFile)['uri'];
 | 
						|
 | 
						|
        // Save file data in file
 | 
						|
        file_put_contents($tempFilePath, $fileData);
 | 
						|
 | 
						|
        $tempFileObject = new File($tempFilePath);
 | 
						|
        $file = new UploadedFile(
 | 
						|
            $tempFileObject->getPathname(),
 | 
						|
            $fileName ?: $tempFileObject->getFilename(),
 | 
						|
            $mimeType ?: $tempFileObject->getMimeType(),
 | 
						|
            0,
 | 
						|
            true // Mark it as test, since the file isn't from real HTTP POST.
 | 
						|
        );
 | 
						|
 | 
						|
        // Close this file after response is sent.
 | 
						|
        // Closing the file will cause to remove it from temp director!
 | 
						|
        app()->terminating(function () use ($tempFile) {
 | 
						|
            fclose($tempFile);
 | 
						|
        });
 | 
						|
 | 
						|
        // return UploadedFile object
 | 
						|
        return $file;
 | 
						|
    }
 | 
						|
 | 
						|
    /* create a tmp file from a raw string: https://gist.github.com/waska14/8b3bcebfad1f86f7fcd3b82927576e38*/
 | 
						|
    public static function UploadedFileFromUrl(string $url, string|null $fileName = null, string|null $mimeType = null): UploadedFile
 | 
						|
    {
 | 
						|
        // Create temp file and get its absolute path
 | 
						|
        $tempFile = tmpfile();
 | 
						|
        $tempFilePath = stream_get_meta_data($tempFile)['uri'];
 | 
						|
 | 
						|
        // Save file data in file
 | 
						|
        file_put_contents($tempFilePath, file_get_contents($url));
 | 
						|
 | 
						|
        $tempFileObject = new File($tempFilePath);
 | 
						|
        $file = new UploadedFile(
 | 
						|
            $tempFileObject->getPathname(),
 | 
						|
            $fileName ?: $tempFileObject->getFilename(),
 | 
						|
            $mimeType ?: $tempFileObject->getMimeType(),
 | 
						|
            0,
 | 
						|
            true // Mark it as test, since the file isn't from real HTTP POST.
 | 
						|
        );
 | 
						|
 | 
						|
        // Close this file after response is sent.
 | 
						|
        // Closing the file will cause to remove it from temp director!
 | 
						|
        app()->terminating(function () use ($tempFile) {
 | 
						|
            fclose($tempFile);
 | 
						|
        });
 | 
						|
 | 
						|
        // return UploadedFile object
 | 
						|
        return $file;
 | 
						|
    }
 | 
						|
}
 |