如何存储 csv 文件 laravel 5 php?

Ray*_*dri 1 php csv laravel laravel-5

每当我上传 CSV 文件时,文件上传后都会更改为 .txt

echo "$path";我显示保存的文件格式的路径是.txt而不是.csv。

有什么方法可以用实际的 .csv 存储文件,或者我只是在某个地方犯了错误?

这是我的表格

    <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Upload file</title>
</head>
<body>
    <form class="" action="{{URL::to('store')}}" enctype="multipart/form-data" method="post">
        <input type="file" name="csv" value="">
        <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
        <br>
        <button type="submit" name="button">upload file</button>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是控制器

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\URL;
use Storage;


class store extends Controller {

    function index(request $request){
        $path=$request->file('csv')->store('csv');

        echo "$path";

    }

}
?> 
Run Code Online (Sandbox Code Playgroud)

上传的csv结果

csv/VKgVPMvwcQKqpqHAXZ1s6o1IyIbz5BkgQqjxotPc.txt
Run Code Online (Sandbox Code Playgroud)

谢谢。

Nam*_*hek 5

您可以替换->store('csv')为,->storeAs('csv', 'filename.csv')为文件指定一个带有扩展名的特定文件名。如果你不这样做,Laravel 将根据文件内容(对于 csv,基本上是文本)采用文件扩展名。

您还可以用来$request->file('csv')->getClientOriginalExtension()获取用户提交文件时使用的文件名的文件扩展名。不过,用户可以故意更改此扩展名。$request->file('csv')->extension()将为您提供 Laravel 为该文件提供的文件扩展名。

要生成这样的文件名哈希,请使用Str::random(40)(系统本身也使用它)。因此,您可以使用如下内容:

$file = $request->file('csv');
$path = $file->storeAs('csv', \Str::random(40) . '.' . $file->getClientOriginalExtension());
Run Code Online (Sandbox Code Playgroud)