Não consigo carregar o arquivo usando FormData usando axios do aplicativo React para Express Server que usa multer.
Dados de texto anexados em formData aparecem no servidor, mas qualquer arquivo parece não estar visível no servidor.
No entanto, explorar as chaves formData no lado do cliente mostra o arquivo.
Aqui está meu código de servidor para imprimir o conteúdo de body: postFile.ts
import * as path from 'path';
let multer = require("multer");
let storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, path.resolve(__dirname));
},
filename: function (req, file, cb) {
cb(null, file.originalname);
}
});
let upload = multer({ storage: storage });
export const postFile = (app: IApp) => {
app.post('/uploadFile', upload.any(), (request: IRequest, response: IResponse) => {
console.log('Got body:', JSON.stringify(request.body));
response.sendStatus(200);
});
}
Este é o código do lado do cliente React: filePicker.tsx
import axios from "axios";
import * as React from "react";
interface IFilePickerProps {
fileToUpload: File;
setFileToUpload: React.Dispatch<File | undefined>;
}
export const FilePicker = (props: IFilePickerProps) => {
const { setFileToUpload, fileToUpload } = props;
// Ref to input element to reset value on file upload completion
const inputRef = React.useRef<HTMLInputElement>();
const { onFileUpload, onFileChange } = useUploadFileCallbacks(
setFileToUpload,
fileToUpload,
inputRef
);
return (
<>
<label>
<input type="file" onChange={onFileChange} ref={inputRef} />
</label>
<button onClick={onFileUpload}>Upload File</button>
</>
);
};
const useUploadFileCallbacks = (
setFileToUpload: React.Dispatch<File | undefined>,
fileToUpload: File,
inputRef: React.RefObject<HTMLInputElement>
) => {
const onFileChange = React.useCallback(
(event: React.ChangeEvent<HTMLInputElement>) => {
setFileToUpload(event.target.files[0]);
},
[setFileToUpload]
);
const onFileUpload = React.useCallback(() => {
handleFileUpload(fileToUpload, inputRef);
}, [fileToUpload]);
return { onFileChange, onFileUpload };
};
const handleFileUpload = async (
fileToUpload: File,
inputRef: React.RefObject<HTMLInputElement>
) => {
let formData = new FormData();
formData.append("usernamesss", "Sparsha Saha");
formData.append("file", fileToUpload);
axios
.post("http://localhost:3001/uploadFile", formData, {
headers: {
"content-type": "multipart/form-data",
},
})
.then(() => {
console.log("Complete");
});
inputRef.current.value = "";
};
O console.log em postFile.ts mostra apenas 'usernamesss: Sparsha Saha'
Procurei soluções, mas nada parece funcionar para mim. Alguém pode me ajudar?
Parece que o console.log não mostra o arquivo, mas ele definitivamente é carregado na pasta designada. Eu me pergunto a qual parte da solicitação os dados do arquivo são realmente anexados e se podemos visualizá-los de alguma forma.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras