Файл Laravel и DropzoneJS загружен с другим расширением - PullRequest
0 голосов
/ 07 мая 2018

Я создал форму здесь с Laravel и DropzoneJS, и я попытался загрузить файл Gimp (.xcf), и когда он загружен, он сохраняется в S3 следующим образом

<random-name>.

без расширения "xcf", просто случайное имя, заканчивающееся точкой.

Кроме того, я создал текстовый файл и переименовал его в test.xcf, когда попытался загрузить этот файл, он был загружен с расширением .txt.

Вот мой UploadController.php, который обрабатывает загрузку:

<?php

namespace App\Http\Controllers;

use App\Upload;
use Illuminate\Http\Request;

class UploadController extends Controller
{
    public function upload(Request $request)
    {
        $originalName = $request->file('file')->getClientOriginalName();
        $fileSize = $request->file('file')->getClientSize();
        $path = $request->file('file')->store('documents');
        $explode = explode('documents/', $path);
        $name = $explode[1];
        $uniqueId = $this->generateUniqueId();

        $upload = new Upload();
        $upload->unique_id = $uniqueId;
        $upload->name = $name;
        $upload->path = $path;
        $upload->original_name = $originalName;
        $upload->size = $fileSize;

        if ($upload->save())
        {
            return response()->json([
                'original_name' => $originalName,
                'size' => $fileSize,
                'url' => env('AWS_URL') . $path,
                'id' => $uniqueId,
                'status' => 'OK'
            ]);
        }

        return response()->json(['status' => 'BAD', 'message' => 'There was a problem saving your file.']);
    }

    public function generateUniqueId()
    {
        $result = '1';
        $result .= rand(100000000, 999999999);

        while(Upload::where('unique_id', '=', $result)->first())
        {
            $result = '1';
            $result .= rand(100000000, 999999999);
        }

        return $result;
    }
}

Я понятия не имею, почему он это делает.

Ответы [ 2 ]

0 голосов
/ 16 июня 2018

Я полагаю, вы создаете свой собственный хэш для имени файла, как я делаю в этом коде: $file = $request->file('csv'); $path = $file->storeAs( 'csv', md5($file->getClientOriginalName()) . $file->getClientOriginalExtension(), 's3' );

Вы также можете добавить uniqid() к md5 input

0 голосов
/ 07 мая 2018

Если вы используете laravel 5+, вы должны получить расширение, также использующее это.

$extension = $file->getClientOriginalExtension();

Это будет хорошо работать.

...