在我的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");
的文件。
答案 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的哑剧,否则可能会破坏文件。