以不同扩展名上载的Laravel和DropzoneJS文件

以不同扩展名上载的Laravel和DropzoneJS文件,laravel,laravel-5,amazon-s3,file-upload,dropzone.js,Laravel,Laravel 5,Amazon S3,File Upload,Dropzone.js,我用Laravel和DropzoneJS创建了一个表单,我尝试上传一个Gimp文件.xcf,当它被上传时,它被保存在S3中,如下所示 <random-name>. 没有xcf扩展名,只有以点结尾的随机名称 另外,我创建了一个文本文件,并在尝试上载扩展名为.txt的文件时将其重命名为test.xcf 下面是我的UploadController.php,它处理上传: <?php namespace App\Http\Controllers; use App\Upload; u

我用Laravel和DropzoneJS创建了一个表单,我尝试上传一个Gimp文件.xcf,当它被上传时,它被保存在S3中,如下所示

<random-name>.
没有xcf扩展名,只有以点结尾的随机名称

另外,我创建了一个文本文件,并在尝试上载扩展名为.txt的文件时将其重命名为test.xcf

下面是我的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;
    }
}

我不知道它为什么会这样做。

如果您使用的是Laravel5+,那么您也应该使用它来获得扩展

$extension = $file->getClientOriginalExtension();

这很好。

我建议您为文件名生成自己的哈希,就像我在下面代码中所做的那样: $file=$request->file'csv'; $path=$file->storeAs “csv”, md5$file->getClientOriginalName$文件->getClientOriginalExtension, “s3” ;


您还可以将uniqid添加到md5输入中

问题不是获取扩展名,而是上载文件的新名称以点结尾。或者它被重命名为.txt。您必须在其中附加扩展名。附加在其中,Laravel会自动生成一个扩展名为的文件名,并将文件存储在S3中。