同时上传图片和字段信息,前后端该怎么设置?

前端 vue3+ts,后端是java+springboot2,总是报415错误,我已经改了Content-Type,还是不行。

img


这是formdata数据

img


这是axios

img


这是后端

前后端如何设置取决于您选择的技术栈和框架,以下是一种可能的解决方案:

前端

前端可以使用 HTML <form> 标签来上传文件和文本字段。以下是一个使用表单上传文件和文本字段的示例:
<form action="/upload" method="post" enctype="multipart/form-data">
  <input type="text" name="username">
  <input type="file" name="avatar">
  <button type="submit">Upload</button>
</form>

这将向 URL /upload 发送 HTTP POST 请求,包含两个字段 username 和 avatar,其中 avatar 是上传的文件。

后端
后端需要解析接收到的请求,从中提取文件和文本字段。

对于 Python 的 Flask 框架,可以使用 Flask-WTF 扩展来处理表单。以下是一个示例视图函数:
from flask import Flask, request
from flask_wtf.file import FileField
from wtforms import StringField
from wtforms.validators import DataRequired
from flask_wtf import FlaskForm

app = Flask(__name__)

class UploadForm(FlaskForm):
    username = StringField('username', validators=[DataRequired()])
    avatar = FileField('avatar')

@app.route('/upload', methods=['POST'])
def upload():
    form = UploadForm(request.form)
    if form.validate_on_submit():
        username = form.username.data
        avatar = form.avatar.data
        # 保存文件和文本字段
        return 'Upload successful'
    return 'Upload failed'



在这个示例中,UploadForm 是一个 WTForms 表单,包含一个文本字段 username 和一个文件字段 avatar。视图函数使用 request.form 获取 POST 请求中的表单数据,并使用 form.validate_on_submit() 验证表单是否有效。如果表单有效,则可以使用 form.username.dataform.avatar.data 获取文本字段和文件字段的值。

注意,这只是一个示例,并且实际实现可能会因为使用不同的技术栈和框架而有所不同。


HTTP 415 错误表示请求的格式不受支持,可能是请求中的 Content-Type 不正确或不受支持。如果您已经尝试更改了 Content-Type 并且仍然出现问题,那么您可以检查一下以下几点:

请求头中的 Content-Type 是否正确设置。如果您同时上传了图片和字段信息,Content-Type 可以设置为 multipart/form-data。
检查请求体的格式是否正确,如果您使用了 multipart/form-data,那么请求体应该符合这个格式,即包含多个部分(part),每个部分都有一个 header 和一个 body,其中文件内容的 header 需要包含 Content-Type 和 Content-Disposition 信息。如果请求体格式不正确,可能会导致后端无法正确解析数据。

检查后端接口的参数是否正确。如果请求体格式正确但仍然无法上传文件,那么可能是后端接口中参数设置有误导致无法接收到上传的文件。
另外,您也可以在后端接口中打印出请求头和请求体的信息,看看其中是否有错误或者异常信息。

您好,关于vue中同时上传图片和文字信息到后台的代码实现,为您找到很多源码和示例,您可以前往参考:
1、实现将图片和表单一起提交到后端,同时将图片地址保存到数据库、再次将存储的图片展示到前端vue页面
https://www.cnblogs.com/zheng-yuzhu/p/16633991.html
2、vue中上传视频或图片或图片和文字一起到后端的解决方法
http://www.3qphp.com/web/javascript/4720.html
3、实现上传图片且带字段提交【基于前端角度】
https://blog.csdn.net/hdp134793/article/details/126536058

formData.append 就可以添加字段了

请试下:


axios({
  method: 'POST',
  url: '/api/...',
  data: formData,
  headers: {
    'Content-Type': 'multipart/form-data'
  }
})

// 或者
axios.post('/api/...',  formData, {
   'Content-Type': 'multipart/form-data'
})

以下答案引用自GPT-3大模型,请合理使用:

前端代码:

var app = new Vue({

el: '#app',

data: {

imgUrl: '',

info: {}

},

methods: {

upload: function() {

var formData = new FormData();

formData.append('imgUrl', this.imgUrl);

formData.append('info', this.info);

axios.post('/uploadFile', formData)

.then(function(res) {

console.log(res);

})

.catch(function(err) {

console.log(err);

});

}

}

});



后端代码:

@RequestMapping("/uploadFile")

public String uploadFile(@RequestBody FormData formData) {

try {

HttpServletRequest request = (HttpServletRequest) formData.get('request');

HttpServletResponse response = (HttpServletResponse) formData.get('response');

InputStream input = request.getInputStream();

byte[] bytes = new byte[1024];

int length = input.read(bytes);

while (length > 0) {

response.write(bytes, 0, length);

length = input.read(bytes);

}

input.close();

} catch (Exception e) {

e.printStackTrace();

}

return "success";

}

如果我的回答解决了您的问题,请采纳我的回答