初めてファイルをアップロードする機能を設定しています。私は反応フロントエンドとファイルを格納するエクスプレスサーバーがあります。私はそれを設定して、ユーザーがファイルを提出できるようにして、それをエクスプレスサーバーに保存したいと思うように保存します。しかし、ユーザーがフォームを送信するたびに、反応フロントエンド(ポート3000上)からサーバー上のPOSTルート(ポート3050)にリダイレクトされます。私はこれがポストリクエストのデフォルトの振る舞いであったことを知らなかった。フォーム送信(React、Express、Multer)によるファイルアップロードのリダイレクトの防止
私はこの動作を避けたいと思っていますが、これを実行する最善の方法が不明です。私はAXIOSリクエストとして機能するアクションを構築しようとしましたが、AXIOSリクエストでフォームデータ(特にファイルデータ)にアクセスするのに問題があります。私の理解は、AXIOSにマルチパートフォームデータのネイティブサポートがないことです。
Event.preventdefaultは明白な選択ですが、それを実装すると、フォーム送信が停止し、適切なフォームデータを取得してから送信します。
フォームのコードが以下に含まれています(このバージョンでは、イベントのデフォルトを防ぎ、アクションをディスパッチするオンクリックイベントが使用されています - アクションは発生しますが、
<div className="modal-wrapper">
<h3 className="title__h3">Upload Data</h3>
<p>Drag and drop anywhere or choose a file to upload.</p>
<p>.csv or .xlsx</p>
<form className="upload-form" ref="uploadForm" id="uploadForm" action="http://localhost:3050/upload" method="POST" enctype="multipart/form-data">
<input name="fileName" placeholder="Name the file you're uploading here"/>
<input type="file" name="upl" id="file" className="inputfile" />
<label htmlFor="file" className="btn btn__white-outline btn__full-width">Select a File</label>
<input onClick={this.submitForm} type="submit" value="submit" />
</form>
</div>;
私の簡単なMulterルート:
app.post('/upload', upload.single('upl'), function(req,res,next) {
return false
})
私の理解では、Axiosを通じてマルチパート形式のアイテムを送信するためのネイティブサポートがないことである、私は中にいるFormDataモジュールに引っ張って避けたいのですがフォーム(他のtハンはリダイレクト)完璧に動作します。フォームデータを送信しながらフォームがサーバー側のページを読み込まないようにする簡単な解決法はありますか?
どちらもうまくいく、あなたの選択を取る。 –
助けてくれてありがとう。私が実行している問題は、リクエストを別の関数(あなたの例では '...他のコードはここに...')で送信することですが、Axiosを使用する必要があります。私は最後の数時間Axiosを介してreq.fileを送信する方法を理解しようとしており、協力することができませんでした。しかし、Axiosなしでフォームを送信すると、ページの更新以外に完璧な処理が実行されます。リフレッシュせずにバニラフォームをエミュレートできるコマンドがあることを期待していましたが、Axiosを放棄しなければならないかもしれません。 –
Axiosでのファイルアップロードの処理については、以下を参照してください。有益な回答を投票するのを忘れないでください... –