上传时如何不更改文件扩展名?

时间:2020-02-20 01:38:51

标签: laravel validation upload mp3

在我的Laravel项目中,我需要上传mp3文件,但是Laravel使用root.images = {} root.images[str(myframe)] = myimage 作为mime类型来验证mpga文件类型,我发现在此answer中。

mp3

我可以接受,但是我的问题是文件以$results = Validator::make($request->all(), [ "song" => "required|file|mimes:mpga|max:8192", ]); 扩展名存储,我从此answer知道了此奇怪操作的原因。

我如何存储文件

mpga

但是我想存储扩展名为// Upload the song $filePath = $request->song->store("public/songs"); 的文件。

2 个答案:

答案 0 :(得分:1)

在看不到您的代码的情况下,我最好的建议是使用Storage类中的putFileAs()方法。

此方法可让您在存储文件时指定文件名:

use Illuminate\Http\File;
use Illuminate\Support\Facades\Storage;

// Manually specify a file name:
Storage::putFileAs(
    'folder',
    new File('/path/to/uploaded-music.mp3'), 
    'stored-song-name.mp3'
);

请参阅Laravel文档:https://laravel.com/docs/5.8/filesystem#storing-files


编辑:如果要像putFile()方法一样保留Laravel随机文件的命名,则可以生成随机字符串并附加扩展名:

use Illuminate\Http\File;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;

// Manually specify a file name:
Storage::putFileAs(
    'folder',
    new File('/path/to/uploaded-music.mp3'), 
    Str::random(40) . '.mp3'
);

如果您查看Laravel source code,这就是putFile()生成随机文件名的方式。

答案 1 :(得分:0)

Lobsterbaz's答案非常有效,我也想给该答案一个替代方案,这将帮助您保持文件的扩展名不变。

Laravel在上载后将mp3的文件扩展名更改为mpga,所以在这里,我将向您展示如何在上传后保持mp3文件的扩展名不变,以下代码将帮助您做到这一点:

use Illuminate\Support\Str;


$path = $request->file('song')->storeAs(
    'songs', Str::random(40).".mp3"
);

恭喜,现在您的歌曲将存储为mp3,但请确保仅上传mp3文件,并验证mp3的哑剧,否则可能会破坏文件。