#laravel #vue.js #file-upload
#laravel #vue.js #загрузка файла
Вопрос:
Я безуспешно пытаюсь загрузить PDF-файлы размером более 2 МБ. Изменены настройки php.ini, время ожидания сервера, но все равно ошибка.
Давайте посмотрим на некоторый код:
Это функция на контроллере
public function saveImage(Request $request)
{
// return $request->all();
$consorciado = User::where('cpfCnpj', '=', $request->consorciado_id)->first();
$documento = Documento::where('cad_doc_id', '=', $request->id)->first();
$documento = new Documento();
$image = request()->file('f');
$documento->user_id = $consorciado->id;
$documento->cad_doc_id = $request->id;
$documento->remark = $request->remark;
$documento->idTematica = $request->idTematica;
$documento->field1 = $request->field1;
$documento->field2 = $request->field2;
$documento->field3 = $request->field3;
$documento->field4 = $request->field4;
$documento->field5 = $request->field5;
$filename = $request->field1 . "_" . $request->field2 . "_" . $request->field3 . "." . $image->getClientOriginalExtension();
$documento->nome = $filename;
Storage::disk('local')->put('public/' . $filename, file_get_contents($image), 'public');
$documento->save(); //salva no meu banco
$client = new Client([
'base_uri' => 'https://gedms.gedocflex.com.br/api/file',
]);
$response = $client->request('POST', 'https://gedms.gedocflex.com.br/api/file', [
'multipart' => [
[
'name' => 'idTematica',
'contents' => $request->idTematica
],
[
'name' => 'f',
'contents' => fopen(storage_path() . "/app/public/" . $filename, 'r')
// 'contents' => fopen('http://18.191.51.177/storage/' . $filename, 'r')
],
[
'name' => 'field1',
'contents' => $request->field1
],
[
'name' => 'field2',
'contents' => $request->field2
],
[
'name' => 'field3',
'contents' => $request->field3
],
[
'name' => 'field4',
'contents' => $request->field4
],
[
'name' => 'field5',
'contents' => $request->field5
],
[
'name' => 'remark',
'contents' => 'CARTA'
],
]
]);
return $response;
}
Форма загрузки является компонентом VueJS, а код:
<template>
<div class="form-group col">
<label class="custom-file">
<slot></slot>
<input
type="file"
name="f"
class
@change="GetImage"
accept="image/jpeg, image/gif, image/png, application/pdf"
:required="required"
/>
<img :src="avatar" alt="Imagem" class="drop" />
<a
href="#"
v-if="loaded"
@click="ligaSpinner"
class="btn btn-success m-t-10"
@click.prevent="Upload"
>
<div v-if="spinner" class="spinner-grow spinner-grow-sm" role="status">
<span class="sr-only">enviando...</span>
</div>Enviar
</a>
<a href="#" v-if="loaded" class="btn btn-danger m-t-10" @click.prevent="Cancel">Cancelar</a>
</label>
<span class="custom-file-control text-muted"></span>
</div>
</template>
<script>
export default {
props: [
"consorciado_id",
"id",
"name",
"remark",
"idTematica",
"field1",
"field2",
"field3",
"field4",
"field5",
"required"
],
data() {
return {
avatar: "http://18.191.51.177/imagens/doc_original.png",
loaded: false,
consorciado: this.consorciado_id,
spinner: false,
reload: null
};
},
methods: {
ligaSpinner() {
this.spinner = true;
},
GetImage(e) {
let f = e.target.files[0];
this.Read(f);
let id = this.consorciado;
let doc_id = this.id;
let remark = this.remark;
let idTematica = this.idTematica;
let field1 = this.field1;
let field2 = this.field2;
let field3 = this.field3;
let field4 = this.field4;
let field5 = this.field5;
let form = new FormData();
form.append("f", f);
form.append("consorciado_id", id);
// form.append("tipo", tipo);
form.append("id", doc_id);
form.append("remark", remark);
form.append("idTematica", idTematica);
form.append("field1", field1);
form.append("field2", field2);
form.append("field3", field3);
form.append("field4", field4);
form.append("field5", field5);
this.file = form;
},
Upload() {
axios
.post(
"/saveImage",
this.file,
// this.tipo,
this.doc_id,
this.remark,
this.idTematica,
this.field1,
this.field2,
this.field3,
this.field4,
this.field5
)
.then(res => {
this.reload = true
this.$toasted
.show("Documento enviado com sucesso!", {
type: "success"
})
.goAway(3000);
this.loaded = false;
this.ligaSpinner = false;
});
},
Read(f) {
let reader = new FileReader();
reader.readAsDataURL(f);
reader.onload = e => {
this.avatar = "http://18.191.51.177/imagens/doc_pdf.png";
};
this.loaded = true;
},
Cancel() {
(this.avatar = "http://18.191.51.177/imagens/doc_original.png"),
(this.loaded = false);
}
}
};
</script>
Ошибка:
message: "file_get_contents(): Filename cannot be empty"
Это происходит только при попытке загрузить файл размером более 2 МБ
Не могу понять, почему нельзя загружать файлы большего размера. PS: Я могу загрузить большой файл через Postman. Проблема возникает при попытке загрузки через браузер.
Что я делаю не так? Заранее спасибо
Комментарии:
1. все еще ошибка — какая ошибка?
Ответ №1:
Ну, проблема была в php.ini при настройке максимального размера загружаемого файла. Просто изменил на большее число, и теперь оно работает!
В любом случае спасибо!