【发布时间】:2021-05-04 09:07:27
【问题描述】:
我对 Laravel 6 有疑问。
不管我怎么尝试转储$request->file('filename')时总是返回null。
我试图转储原生 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
}
}
【问题讨论】:
-
需要将表单的
enctype设置为multipart/formdataw3schools.com/TAgs/att_form_enctype.asp -
@RavishaHesh 我是。
-
编辑您的问题并添加您的视图(表单)代码以及您尝试过的控制器代码
-
不确定您要做什么。使用
onInputChange方法,您将csv 的文本保存到this.form.csv,在上传时您从upload和硬编码文本中获得价值。此外,如果您将文件作为文本发送,则不需要多部分标题
标签: laravel file-upload