質問編集履歴
2
React最小構成
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
NextJSのファイルアップロード実装について(APi送信)
|
1
|
+
ReNextJSのファイルアップロード実装について(APi送信)
|
test
CHANGED
@@ -230,7 +230,7 @@
|
|
230
230
|
|
231
231
|
|
232
232
|
|
233
|
-
Reactの最小構成で
|
233
|
+
Reactの最小構成で試したら、データが更新されました。
|
234
234
|
|
235
235
|
|
236
236
|
|
@@ -266,29 +266,31 @@
|
|
266
266
|
|
267
267
|
|
268
268
|
|
269
|
+
const res = await axios.patch(
|
270
|
+
|
269
|
-
|
271
|
+
'http://localhost:8000/api/v1/auth/users/me/',
|
270
|
-
|
271
|
-
method: 'PATCH',
|
272
|
-
|
273
|
-
headers: {
|
274
|
-
|
275
|
-
Authorization: `Token xxxxx`,
|
276
|
-
|
277
|
-
'Content-Type': 'multipart/form-data',
|
278
|
-
|
279
|
-
},
|
280
272
|
|
281
273
|
formData,
|
282
274
|
|
275
|
+
{
|
276
|
+
|
277
|
+
headers: {
|
278
|
+
|
279
|
+
'Content-Type': 'multipart/form-data',
|
280
|
+
|
281
|
+
Authorization: `Token xxx`,
|
282
|
+
|
283
|
-
}
|
283
|
+
},
|
284
|
+
|
284
|
-
|
285
|
+
}
|
286
|
+
|
285
|
-
|
287
|
+
)
|
286
|
-
|
288
|
+
|
289
|
+
|
290
|
+
|
287
|
-
const
|
291
|
+
console.log(res.status)
|
288
|
-
|
289
|
-
|
290
|
-
|
292
|
+
|
291
|
-
console.log(
|
293
|
+
console.log(res.data)
|
292
294
|
|
293
295
|
}
|
294
296
|
|
1
最小構成でも試してみました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -221,3 +221,111 @@
|
|
221
221
|
|
222
222
|
|
223
223
|
ぜひともアドバイスをよろしくお願いいたします。
|
224
|
+
|
225
|
+
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
■追記
|
230
|
+
|
231
|
+
|
232
|
+
|
233
|
+
Reactの最小構成でも試してみましたが、バックエンドのデータが変更されません。
|
234
|
+
|
235
|
+
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
```js
|
240
|
+
|
241
|
+
import { useState } from 'react'
|
242
|
+
|
243
|
+
|
244
|
+
|
245
|
+
function App() {
|
246
|
+
|
247
|
+
const [avatar, setAvatar] = useState(null)
|
248
|
+
|
249
|
+
|
250
|
+
|
251
|
+
const editAvatar = () => {
|
252
|
+
|
253
|
+
const fileInput = document.getElementById('avatarInput')
|
254
|
+
|
255
|
+
fileInput?.click()
|
256
|
+
|
257
|
+
}
|
258
|
+
|
259
|
+
|
260
|
+
|
261
|
+
const sendAbatar = async () => {
|
262
|
+
|
263
|
+
var formData = new FormData()
|
264
|
+
|
265
|
+
formData.append('avatar', avatar)
|
266
|
+
|
267
|
+
|
268
|
+
|
269
|
+
const apiRes = await fetch('http://localhost:8000/api/v1/auth/users/me/', {
|
270
|
+
|
271
|
+
method: 'PATCH',
|
272
|
+
|
273
|
+
headers: {
|
274
|
+
|
275
|
+
Authorization: `Token xxxxx`,
|
276
|
+
|
277
|
+
'Content-Type': 'multipart/form-data',
|
278
|
+
|
279
|
+
},
|
280
|
+
|
281
|
+
formData,
|
282
|
+
|
283
|
+
})
|
284
|
+
|
285
|
+
|
286
|
+
|
287
|
+
const data = await apiRes.json()
|
288
|
+
|
289
|
+
|
290
|
+
|
291
|
+
console.log('api', data)
|
292
|
+
|
293
|
+
}
|
294
|
+
|
295
|
+
|
296
|
+
|
297
|
+
return (
|
298
|
+
|
299
|
+
<>
|
300
|
+
|
301
|
+
<div>Avatar</div>
|
302
|
+
|
303
|
+
<input
|
304
|
+
|
305
|
+
type="file"
|
306
|
+
|
307
|
+
id="avatarInput"
|
308
|
+
|
309
|
+
hidden={true}
|
310
|
+
|
311
|
+
onChange={(e) => setAvatar(e.target.files[0])}
|
312
|
+
|
313
|
+
/>
|
314
|
+
|
315
|
+
<div onClick={editAvatar}>アバターを変更</div>
|
316
|
+
|
317
|
+
<div onClick={sendAbatar}>登録する</div>
|
318
|
+
|
319
|
+
</>
|
320
|
+
|
321
|
+
)
|
322
|
+
|
323
|
+
}
|
324
|
+
|
325
|
+
|
326
|
+
|
327
|
+
export default App
|
328
|
+
|
329
|
+
|
330
|
+
|
331
|
+
```
|