apache 在Laravel中上传后.mp3文件大小为0

iih3973s  于 2022-11-16  发布在  Apache
关注(0)|答案(1)|浏览(134)

在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
gdx19jrr

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

相关问题