我正在构建一个Laravel Vue.jsSPA(单页应用程序)与BootstrapVue,VeeValester和axios作为HTTP客户端。
在axios中,当我使用Multipart/form-data;边界=${上传表单。_boundary}
作为标头
中的Content-Type
时,Laravel Controller方法中的所有验证都会失败。
但是,如果我在标题中使用
'content-type':'multipart/form data'
,那么除了文件
输入字段外,验证也可以工作。在Laravel控制器方法中,文件
字段变为空。
这发生在组件
EditProfile中。vue
。内容包括:
<template>
<ValidationObserver ref="form" v-slot="{ passes }">
<div id="registration_form">
<div id="form_title" class="text-center">Edit Your Profile</div>
<div v-html="result" class="result text-center"></div>
<b-form name="uploadForm" @submit.prevent="passes(onSubmit)" @reset="resetForm" enctype="multipart/form-data">
<ValidationProvider vid="name" rules="required|min:2" name="name" v-slot="{ valid, errors }">
<b-form-group
label="User Name:"
label-for="exampleInput1"
>
<b-form-input
type="text"
disable-leading-trailing-space
v-model="name"
plaintext
:state="errors[0] ? false : (valid ? true : null)"
placeholder="Enter your name"
></b-form-input>
<b-form-invalid-feedback id="inputLiveFeedback">{{ errors[0] }}</b-form-invalid-feedback>
</b-form-group>
</ValidationProvider>
<ValidationProvider vid="photo" rules="required" name="photo" v-slot="{ valid, errors }">
<b-form-group
label="Photo:"
label-for="exampleInput1"
>
<b-form-file
accept="image/x-png,image/gif,image/jpeg"
v-model="file"
:state="Boolean(file)"
placeholder="Choose a file or drop it here..."
drop-placeholder="Drop file here..."
@change="onFileChange" enctype="multipart/form-data"
></b-form-file>
<b-form-invalid-feedback id="inputLiveFeedback">{{ errors[0] }}</b-form-invalid-feedback>
<div class="mt-3">Selected file: {{ file ? file.name : '' }}</div>
<!-- Plain mode -->
<!--<b-form-file v-model="file2" class="mt-3" plain></b-form-file>
<div class="mt-3">Selected file: {{ file2 ? file2.name : '' }}</div>-->
<div id="preview">
<img v-if="url" :src="url" />
</div>
</b-form-group>
</ValidationProvider>
<b-button type="submit" variant="primary">Submit</b-button>
<b-button type="reset" variant="danger">Reset</b-button>
</b-form>
</div><!-- end of id registration_form-->
</ValidationObserver>
</template>
在JS部分,我有:
<script>
import { ValidationObserver, ValidationProvider } from "vee-validate";
export default {
name: "EditProfile",
props: {
},
components: {
ValidationObserver,
ValidationProvider
},
data: () => ({
name: "",
photo:"",
file:"",
url:"",
result:''
}),
methods: {
onFileChange(e) {
this.file = e.target.files[0];
this.url = URL.createObjectURL(this.file);
},
onSubmit() {
console.log("Form submitted yay!");
this.result='<span class="wait">Please wait ...</span>';
axios.post('/update_profile_now',
{
name: this.name,
photo:this.file
}, // the data to post
{
headers: {
//Accept: 'application/json',
'Content-Type': `multipart/form-data; boundary=${uploadForm._boundary}`
}
})
.then(response => {
if(response.data.success){
this.result='<span class="succes">Registration completed !!</span>';
}else{
this.$refs.form.setErrors(response.data.errors);
this.result='<span class="error">Invalid data !!</span>';
}
})
.catch(error => {
if(typeof error !=="undefined"){
console.log(error);
}
});
// .finally(() => this.loading = false)
},
resetForm() {
this.name = "";
this.result='';
requestAnimationFrame(() => {
this.$refs.form.reset();
});
}
}
};
</script>
在相应的Laravel控制器方法中,我有:
public function update_profile_now(Request $request)
{
$rules = array(
'name' => 'required | min:4',
'photo'=> 'image|mimes:jpeg,png,jpg|max:2048'
);
$validator = Validator::make(Input::all(), $rules);
// Validate the input and return correct response
if ($validator->fails())
{
return Response::json(array(
'success' => false,
'errors' => $validator->getMessageBag()->toArray()
), 200);
}
//file uploading code goes here
return Response::json(array('success' => true), 200);
}
我想要的是里面有
file
输入的表单,它将被提交,然后在文件上传和其他工作之后,将从方法发送JSON响应。
那么正确的标题应该是什么,或者我需要采取任何其他手段吗?
我建议在提交表单后使用veevalization
验证表单。
这是非常简单和甜蜜的验证方法。
你可以从这里安装它。Vee验证链接
我正在尝试使用Support Bee API创建附件,如下所述:https://supportbee.com/api#create_attachment 我编写了一个服务,它使用创建并发送使用文件名的请求。 如果我在《邮递员》中测试,它会成功。我正在为正文使用,只是从UI中选择要上载的文件: 当我试图通过我的服务上传它时,它不起作用: 这将导致500内部服务器错误。检查对象时,我可以看到它的标题值
我仍然对上传文件的不同方法感到困惑。后端服务器不在我的控制之下,但我可以使用Swagger page或Postman上传文件。这意味着服务器运行正常。但当我使用AngularJS进行上传时,它不起作用。 以下是使用Postman进行测试的方法。我只是在使用表单数据: 请注意,请求头的内容类型为多部分/表单数据。但是请求负载具有文件名和内容类型,即image/png。 这是我的代码: 参数只是图像数
我正在尝试在 Java 应用程序中设置一个 Apache Camel 路由,其中使用者终结点是一个 restlet 组件,它将 HTTP 文件上传作为多部分表单数据的 POST 进行处理,然后创建者终结点将请求转发到也接受多部分表单数据的 rest 服务。我是骆驼的新手,不知道如何正确地连接它。以下是到目前为止我的路线。我是否需要对正文进行任何转换,还是会按原样转发多部分表单数据?有人可以为我提供
我在将.zip文件上载到远程服务器时遇到了一个问题,因为上载后文件中丢失了一些字节。在重新下载文件时,.zip存档是不可打开的,这使我相信我需要这些字节来成功地执行上传。 我正在使用多部分/表单数据POST请求来上传文件。下面的代码中给出了我用于执行此操作的实用工具帮助器类: 为了在需要信用的地方给予信用,这个实用程序基于Peter's Notes和Codejava.net中的示例。使用以下代码调
我希望用户单击一个按钮,一次上载一个文档。 目前,当用户上载文档时,它会将“documents”控件标记为满意。但是,如果用户尝试上载另一个文档,但随后取消,则会将控件标记为不满意。它仍然有第一个文档,但在文件资源管理器上单击“取消”似乎会使验证器认为没有上载任何文档。我怎样才能避开这件事? 在我的html中: 在我的.ts中: 现在,我的upoadDocument()函数对验证没有任何作用。
本文向大家介绍vue+axios实现文件下载及vue中使用axios的实例,包括了vue+axios实现文件下载及vue中使用axios的实例的使用技巧和注意事项,需要的朋友参考一下 功能:点击导出按钮,提交请求,下载excel文件; 第一步:跟后端童鞋确认交付的接口的response header设置了 以及返回了文件流。 第二步:修改axios请求的responseType为blob,以pos