我正在使用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()]
);
答案 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()方法的第一个和第二个参数相同。