在这里,我使用springboot和react实现图像上传到数据库。解析http请求头时遇到错误。
错误:
分析http请求头时出错
java.lang.illegalargumentexception:在方法名称[0x160x030x010x020x000x010x000x010x010fc0x030x030x1f0x4t0x880xe1t0x070x00[ua0xf40x8b0a0x900x8c<}0xe20xf70x080xa90xdao0xb3u0xc7g0xaf0xb30xa8]中发现无效字符。http方法名称必须是令牌
React
doit=(e)=>{
e.preventDefault();
let imagefile = document.querySelector('#input');
let formData = new FormData();
formData.append("image", imagefile.files[0]);
return axios.post('https://localhost:8080/fileupload', "image",formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
});
}
<form encType='multipart/form-data'>
<input id="input" type='file' accept="image/*"/>
<button onClick={this.doit} type='submit'>Submit</button>
</form>
Spring Boot
@PostMapping("/fileupload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE))
public String fileUpload(@RequestParam("name") String name, @RequestParam MultipartFile file) {
try {
byte[] image = file.getBytes();
MyModel model = new MyModel(name, image);
int saveImage = myService.saveImage(model);
if (saveImage == 1) {
return "success";
} else {
return "error";
}
} catch (Exception e) {
return "error";
}
}
1条答案
按热度按时间o8x7eapl1#
所以实际上这个问题与你发送文件的方式有关。图像和视频与json数据不同。它们是长串的数字或编码文本,在屏幕上创造视觉杰作。我还不完全明白,基本上你需要做的是得到文件的位置。例如,如果使用一个文件选取器api,它允许您选择要上载的内容,并且您可以将该信息存储在一个变量中,该变量就是“file”,然后使用javascript的内置fetch方法。
哈哈,他们没有教我如何在编码训练营或其他什么,我没有意识到有更多的类型和事情要做这么久。我知道了如何使它与放大存储一起工作,如果有人需要,我会以本机方式作出React,只要问一个问题,我就会提供一个解决方案。
这家伙谈到了最好的方法,把东西转换成你真正需要的格式。我提供的解决方案是最慢的,但很容易理解。
http://eugeneware.com/software-development/converting-base64-datauri-strings-into-blobs-or-typed-array
您还应该结帐:
https://docs.mongodb.com/manual/core/gridfs/
在mongodb数据库中存储图像//基本上是相同的问题
https://javabeat.net/mongodb-gridfs-tutorial/
我犯了这个错误之前,我不知道如何解决它,我的帮助告诉我开始存储在awss3这不是我所要求的图像。我希望你能弄明白。