laravel - Laravel 6 $request->file('myfile') 总是返回 null
问题描述
我对 Laravel 6 有疑问。
无论我尝试了什么,它总是在 dump 时返回 null $request->file('filename')
。我试图转储原生 php $_FILES 并返回空数组。
如果我做 $request->get('filename') 我可以得到文件内容这很奇怪。
我的 Vue 组件
<template>
<div class="container">
<div v-if="errors" class="errors">
<p>{{errors}}</p>
</div>
<form @submit.prevent="upload" enctype="multipart/form-data">
<div class="form-input">
<input type="file" name="csv" @change="onInputChange">
</div>
<div class="form-input">
<input type="checkbox" name="save_to_database" v-model="form.save_to_database">
<label>Save to database</label>
</div>
<div class="form-input">
<button type="submit" class="submit-btn" :disabled="form.csv_file == ''">Submit</button>
</div>
</form>
<div>
<p>
<strong>Avg price:</strong>
{{ average_price }}
</p>
<p>
<strong>Total houses sold:</strong>
{{ total_houses_sold }}
</p>
<p>
<strong>No of crimes in 2011:</strong>
{{ number_of_crimes }}
</p>
<p>
<strong>Avg price per year in London area</strong>
{{ avg_price_per_year_london }}
</p>
</div>
</div>
</template>
<script>
export default {
data(){
return {
errors: '',
form: {
csv: '',
save_to_database: false
},
average_price: 0,
total_houses_sold: 0,
number_of_crimes: 0,
avg_price_per_year_london: 0
}
},
methods: {
onInputChange(e){
let csv = e.target.files;
if (!csv.length){
return;
}
let reader = new FileReader();
reader.readAsText(csv[0]);
reader.onload = (e) => {
this.form.csv = reader.result;
};
},
upload(){
let form_data = new FormData();
form_data.append('csv', 'sadasda')
form_data.append('save_to_database', this.form.save_to_database);
const config = {
headers: { 'content-type': 'multipart/form-data' }
}
axios.post('/api/upload_csv', form_data, config)
.then(response => {
})
.catch(error => this.errors = error)
},
},
}
</script>
路线
web.php
Route::get('/{any}', 'AppController@index')->where('any', '.*');
api.php
Route::post('upload_csv', 'UploadCsvFileController@uploadFile');
控制器.php
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Request;
use Illuminate\Http\UploadedFile;
class UploadCsvFileController extends Controller
{
public function uploadFile(Request $request)
{
dd($request->file('csv')); // null
dd($_FILES); // [] Whyyyyy???
dd($request->get('csv')); // returns output
}
}
解决方案
您只在那里发布 2 个密钥csv
,save_to_database
但是,您还需要发送文件。为此,您应该将代码更新为:
onInputChange(e){
let csv = e.target.files;
if (!csv.length) {
return;
}
this.form.my_file = csv[0] /// add this
...
并更新:
let form_data = new FormData();
form_data.append('my_file', this.form.my_file) // add this
之后,您将能够在服务器端获取文件:
$request->file('my_file')
推荐阅读
- javascript - 反应:子组件中的切换功能未按预期工作
- javascript - 如何通过 JS 脚本或在 React Native 中运行 Monero CLI 命令?
- python - 无法设置 python 事件标志
- javascript - 包含链接的 div 的 Javascript dom 子项
- css - 用户向下滚动时扩展和更改导航栏
- java - 当基础 IAction 贡献项更新时刷新 IContributorManager
- html - z-index 堆叠指定之外的元素
- gps - 不同的结果来自 2 个相同的 gps 模块,在相同的位置使用相同的程序
- php - 在 PHP 中显示 MySQL 请求
- asp.net-mvc - 获取 web api 的属性值 Sharepoint 属性包