xls文件在上传到服务器时存储为文件夹

时间:2017-10-18 20:13:30

标签: php excel laravel-5.4

我正在使用laravel 5.4并尝试将一些xls格式的银行对帐单上传到服务器。

文件正在上传到磁盘上,但不是创建一个excel文件,而是在其中创建一个带有.txt文件的目录。

此txt文件包含xls文件的内容。

.
├── 835e9d46-b43d-11e7-ad3c-847beb400c7ebank-statement.xls
│   └── 0qaYUFrYBLfDupI5v1GlUBuU6aVA8ZQTKdCrR90o.txt
└── bd4cb0fa-b43e-11e7-bdc8-847beb400c7ebank-statement.xls
    └── 2h2Z5Fy6seJtxxxAsYitZwTfA48XIOIpnc7W58xP.txt

查看文件代码

{{ Form::open(['route' => 'upload-statement', 'class' => 'form-horizontal', 'files' => true]) }}
                            {{ csrf_field() }}



                            <div class="form-group{{ $errors->has('statement_file') ? ' has-error' : '' }}">
                                <label for="email" class="col-md-4 control-label">Chose statement file</label>

                                <div class="col-md-6">
                                    <input autocomplete="off" id="statement_file" type="file" class="form-control" name="statement_file"  required autofocus >

                                    @if ($errors->has('statement_file'))
                                        <span class="help-block">
                                        <strong>{{ $errors->first('statement_file') }}</strong>
                                    </span>
                                    @endif
                                </div>
                            </div>

                            <div class="form-group{{ $errors->has('ga_code') ? ' has-error' : '' }}">
                                <label for="password" class="col-md-4 control-label">GA Code</label>

                                <div class="col-md-6">
                                    <input id="ga_code" type="text" class="form-control" name="ga_code" required>

                                    @if ($errors->has('ga_code'))
                                        <span class="help-block">
                                        <strong>{{ $errors->first('ga_code') }}</strong>
                                    </span>
                                    @endif
                                </div>
                            </div>
                            <div class="form-group">
                                <label class="control-label col-lg-4"></label>
                                <div class="col-lg-8">
                                    <button class="btn btn-primary" id="uploadbankfileid" name="uploadbankfileid">Upload File</button>                                        </div>
                            </div>
                        </form>

控制器代码

$statementFile = request()->file('statement_file');


$newFileName = Uuid::uuid1() . "bank-statement." . $statementFile->getClientOriginalExtension();

$originalFileName = $statementFile->getClientOriginalName();


$path = $request->file('statement_file')->store(
            '/'.$newFileName, 'bank-statements',['mimeType'=>$statementFile->getClientMimeType(),'mime'=>$statementFile->getClientOriginalExtension()]
        );

2 个答案:

答案 0 :(得分:0)

在doku中:

&#34; store方法接受相对于文件系统配置的根目录存储文件的路径。此路径不应包含文件名,因为将自动生成唯一ID作为文件名。&#34;

第一个参数只是应保存的文件夹

使用storeAs功能

 storeAs(string $path, string $name, array|string $options = [])

答案 1 :(得分:0)

这就解决了我的问题

$statementFile = request()->file('statement_file');
$newFileName = Uuid::uuid1() . "-bank-statement." . $statementFile->getClientOriginalExtension();
$uplodedPath = $statementFile->storeAs("/", $newFileName, ['disk' => 'bank-statements']);

UploadedFile :: store()方法只接受两个参数,第一个参数是要存储文件的目录的名称,第二个参数是字符串disk-name,或者是数组[&#39;磁盘&#39 ; =&gt;&#39;文件夹的disk-name&#39;]。 store方法可用于我们不需要上传文件的任何自定义命名约定的情况。

UploadedFile :: storeAs()接受三个参数,第二个参数是生成的文件的自定义名称,第一个和第三个参数与UploadedFies :: store()方法的第一个和第二个参数相同。