Как получить доступ к одному и тому же загруженному файлу в памяти через несколько различных вызовов API в Django
Я создаю приложение React/DRF, которое должно позволить пользователю загрузить файл Excel, затем выбрать лист из всех доступных листов в файле, а затем выбрать столбец данных из выбранного листа, прежде чем произойдет обработка данных. Мне не нужно сохранять файл, а только окончательные данные, которые будут отправлены в базу данных. Поскольку будет как минимум 3 отдельных вызова API - загрузить файл, выбрать лист, выбрать столбец - мне интересно, как сохранить доступ к этому же файлу в течение всего времени в Django.
Вот мой код фронтенда:
const DataProcessing: NextPage = () => {
const [selectedFile, setSelectedFile] = useState<File>("");
const [isSelected, setIsSelected] = useState<boolean>(false);
const [availableSheets, setAvailableSheets] = useState<Array<string>>([]);
const [selectedSheet, setSelectedSheet] = useState<string>("");
console.log(availableSheets);
console.log(selectedSheet);
const changeHandler = (event: any) => {
setSelectedFile(event.target.files[0]);
setIsSelected(true);
};
const handleSubmission = () => {
const formData = new FormData();
formData.append("File", selectedFile);
axios
.post("http://localhost:8000/api/upload-file/", formData, {
headers: {
"Content-Type": "multipart/form-data",
},
})
.then((response) => setAvailableSheets(response.data.available_sheets))
.catch((error) => {
console.error("Error:", error);
});
};
const handleSubmissionSheet = () => {
axios
.post("http://localhost:8000/api/selected-ar-sheet/", selectedSheet, {
headers: {
"Content-Type": "application/json",
},
})
.then((response) => console.log(response))
.catch((error) => {
console.error("Error:", error);
});
};
return (
<>
<div className="flex flex-col mx-32 space-y-8">
<input type="file" name="file" onChange={changeHandler} />
{isSelected ? (
<div>
<p>Filename: {selectedFile.name}</p>
<p>Filetype: {selectedFile.type}</p>
<p>Size in bytes: {selectedFile.size}</p>
<p>
lastModifiedDate:{" "}
{selectedFile.lastModifiedDate.toLocaleDateString()}
</p>
</div>
) : (
<p>Select a file to show details</p>
)}
<div>
<button onClick={handleSubmission}>Submit</button>
</div>
<form>
<select onChange={(e) => setSelectedSheet(e.target.value)}>
{availableSheets.map((sheet, index) => (
<option key={index}>{sheet}</option>
))}
</select>
<div>
<button onClick={handleSubmissionSheet}>Submit sheet</button>
</div>
</form>
</div>
</>
);
};
export default DataProcessing;
А это мой код представления API Django:
class FileUploadView(APIView):
parser_classes = [MultiPartParser]
def post(self, request):
my_file = request.FILES['File']
xl = excel_importer(my_file)
sheets = available_sheets(xl)
data = {"available_sheets":sheets}
return Response(data, content_type = 'application/javascript; charset=utf8')
class SelectedARSheet(APIView):
def post(self, request):
selected_sheet = request.data
ar_raw_data = parse_sheet(xl, selected_sheet)
return Response(ar_raw_data, content_type = 'application/javascript; charset=utf8')
В представлении FileUploadView загруженный файл хранится в памяти. Как я могу получить доступ к тому же файлу в представлении SelectedARSheet?