在Laravel 9中,当我上传一个mp3文件时,在我的本地环境(Windows和XAMPP)上没有问题。但是在Linux Ubuntu服务器和Apache服务器上,当文件上传时,它的大小等于0。
此外,其他文件类型,如图像,甚至不同的音频文件类型没有问题,他们的工作正常。
另外,我在.htaccess
文件中添加了mime类型支持,但它并没有解决这个问题。为了澄清我的问题,我将在下面添加我的代码。pulic
目录中的.htaccess
:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
# Video support
AddType video/ogg .ogv
AddType video/mp4 .mp4
AddType video/webm .webm
AddType video/ogv .ogv
# Audio support
AddType audio/mp3 .mp3
AddType audio/mpeg .mp3
AddType audio/oga .oga
AddType audio/ogg .ogg
AddType audio/wav .wav
# For HLS support
AddType application/x-mpegURL .m3u8
AddType vnd.apple.mpegURL .m3u8
AddType video/MP2T .ts
# For M(PEG)-DASH support
AddType application/dash+xml .mpd
# For subtitles support
AddType text/vtt .vtt
AddType text/srt .srt
更新1:
UploadController
:
class UploadController extends Controller
{
public function __construct(private Uploader $uploader)
{
}
public function store(StoreRequest $request)
{
return $this->uploader->upload();
}
}
Uploader
:
class Uploader
{
private $file;
public function __construct(private Request $request)
{
$this->file = $this->request->file;
}
public function upload()
{
DB::beginTransaction();
try {
$folderName = $this->getFolderName();
$this->saveFileIntoDatabase($folderName);
$this->putFileIntoStorage($folderName);
DB::commit();
return $folderName;
} catch (\Exception $e) {
DB::rollBack();
return '';
}
}
private function saveFileIntoDatabase(string $folderName)
{
return TemporaryFile::create([
'folder' => $folderName,
'file_name' => $this->getFileName()
]);
}
private function getFolderName()
{
return uniqid() . '-' . now()->timestamp;
}
private function getFileName()
{
return $this->file->getClientOriginalName();
}
private function putFileIntoStorage(string $folderName)
{
return $this->file->storeAs(config('filesystems.temporary_file_path') . $folderName,$this->getFileName());
}
}
且在filesystems.php
中,temporary_file_path
为:
'temporary_file_path' => 'tmp' . DIRECTORY_SEPARATOR
1条答案
按热度按时间gdx19jrr1#
对于遇到此问题的用户:
在我的情况下,这个问题出现,由于上传最大文件大小在
php.ini
.为了解决这个问题,你应该改变它。你有三个文件,每个都有不同的用途。
/etc/php/5.6/cli/php.ini
用于CLI PHP程序,您可以通过在终端上运行php
找到该程序。/etc/php/5.6/cgi/php.ini
是用于php-cgi系统的,在此设置中没有专门使用。/etc/php/5.6/apache2/php.ini
是Apache所使用的PHP插件。您需要编辑此文件,以便将更改应用于您的Apache设置,该设置使用Apache的内置PHP模块。/etc/php/5.6/fpm/php.ini
用于php5-fpm
处理器,它是一个与fastcgi兼容的PHP处理“ Package 器”(例如从NGINX切换到php5-fpm),并作为一个独立的进程在系统上运行(与Apache PHP插件不同)对于低于16.04的Ubuntu版本,
/etc/php/5.6/
、/etc/php/7.0/
、/etc/php/7.1/
等将被替换为/etc/php5/
等。否则,这些路径将保持正确。请根据您的环境相应地调整此路径,将5.6
或编号替换为您环境中存在的实际版本文件夹。打开
php.ini
,然后找到upload_max_filesize
,然后根据需要更改值,例如8M
。然后保存文件。最后,不要忘记重新启动Apache。
在
Ubuntu
中,您可以通过以下命令执行此操作:sudo service apache2 restart
个