2014-09-13 19 views
5

Ho un'API Laravel 4.2 che, quando si crea una risorsa, accetta caricamenti di file. Il file viene recuperato con Input::file('file')Laravel - percorso file per istanza UploadedFile

Ora voglio scrivere uno script (anche in Laravel) che creerà alcune risorse (quindi non posso usare un modulo HTML che POST all'endpoint dell'API). Come posso tradurre un percorso di file in un'istanza di UploadedFile in modo che lo Input::file('file') lo prelevi nell'API?

risposta

8

Costruisci semplicemente un'istanza. L'API è:

http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/File/UploadedFile.html

così si dovrebbe essere in grado di fare:

$file = new UploadedFile(
    '/absolute/path/to/file', 
    'original-name.gif', 
    'image/gif', 
    1234, 
    null, 
    TRUE 
); 

Avviso: È necessario specificare il parametro costruendo 6 come TRUE, quindi la classe UploadedFile sa che stai caricando l'immagine tramite l'ambiente di test delle unità.

+0

Utilizzando questo approccio, '$ file-> isValid()' restituisce false (poiché 'is_uploaded_file()' restituisce false); quindi nell'API non sono in grado di selezionare l'istanza 'UploadedFile' usando' Input :: file() ', e inoltre non posso fare' $ file-> move() '. La tua risposta mi ha indirizzato nella giusta direzione, tuttavia, e con alcune modifiche minori nell'API sono riuscito a risolvere il problema. Grazie! – whonoes

+0

@whonoes hai risolto? –

+0

Devi specificare il 6 ° parametro di costruzione come TRUE, quindi la classe UploadedFile sa che stai caricando l'immagine tramite l'ambiente di test dell'unità. –

1
/** 
    * Create an UploadedFile object from absolute path 
    * 
    * @static 
    * @param  string $path 
    * @param  bool $public default false 
    * @return object(Symfony\Component\HttpFoundation\File\UploadedFile) 
    * @author Alexandre Thebaldi 
    */ 

    public static function pathToUploadedFile($path, $public = false) 
    { 
    $name = File::name($path); 

    $extension = File::extension($path); 

    $originalName = $name . '.' . $extension; 

    $mimeType = File::mimeType($path); 

    $size = File::size($path); 

    $error = null; 

    $test = $public; 

    $object = new UploadedFile($path, $originalName, $mimeType, $size, $error, $test); 

    return $object; 
    } 
Problemi correlati