React
1//画像のアップロードと関係ない部分は省いています 2 3//画像ファイルの読み取り 4 handleFileChange = (id, e) => { 5 e.preventDefault(); 6 let reader = new FileReader(); 7 let file = e.target.files[0]; 8 reader.onloadend = () => { 9 this.props.file(id, file);//fileをreader.resultでもダメでした。 10 }; 11 reader.readAsDataURL(file); 12 console.log(file) 13 }; 14 15render() { 16 const product = this.props.products.map(product => { 17 if (product.isVisible === true) { 18 return ( 19 <ul key={product.id}> 20 <li>{product.title}</li> 21 <li>{product.description}</li> 22 <li>{product.price}円</li> 23 24 25 <div> 26 <input type="file" onChange={e => this.handleFileChange(product.id, e)} /> 27 </div> 28 29 30 </ul> 31 ); 32 } 33 }); 34 35 return ( 36 <div> 37 <h1>商品リスト</h1> 38 {product} 39 </div> 40 ); 41 }
React
1 /** 2 * 画像HOST 3 */ 4 image = (id, imagePath, apiToken) => { 5 const REACT_APP_HOST = process.env.REACT_APP_HOST;//http://localhost:8080/ 6 axios.patch( 7 REACT_APP_HOST + 'api/products' + `/${id}` + `/images`, 8 { imagePath: imagePath }, 9 { 10 headers: { 11 Authorization: `Bearer:${apiToken}` 12 }, 13 } 14 ); 15}; 16 17 18 //画像の追加 19 file = async (id, imagePath) => { 20 try { 21 const apiToken = this.state.apiToken; 22 const products = this.state.products.slice(); 23 await this.image(id, imagePath, apiToken); 24 const fileIndex = products.findIndex(product => product.id === id); 25 products[fileIndex] = { ...products[fileIndex], imagePath }; 26 console.log(products); 27 } catch (e) { 28 if (e.response.status === 401) { 29 alert(e.response.data.detail); 30 } else if (e.response.status === 500) { 31 alert(e.response.data.detail); 32 } 33 } 34 };
JAVA
1 /** 2 * 商品画像アップロード 3 * 4 * @param id 商品ID 5 * @param file アップロードファイル 6 * @return 画像を更新した商品情報 7 */ 8 @PatchMapping("{id}/images") 9 @ResponseStatus(HttpStatus.OK) 10 public ProductDto uploadImage( 11 @PathVariable Long id, @RequestParam(name = "imagePath") MultipartFile file) { 12 return productService.uploadImage(id, file); 13 }
現状、500のエラーが発生してしまい、うまくmultipartファイルが送れていないように思います。
message: "Current request is not a multipart request"
- 試してみたこと
axiosのheadersに'Content-Type': 'multipart/form-data',を入れる。
結果
Failed to parse multipart servlet requestとエラーになってしまう。
Content-Typeは自動で設定されるため、headersに書かなくていいという記事を見かけたので書いていないのですが、
書かないとマルチパートリクエストと判断されないエラーになるといったジレンマにハマってしまいました。
分からない部分や追記が欲しい部分はぜひお申し付けください。
ご教授いただきたいです><
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。