Как получить доступ к одному и тому же загруженному файлу в памяти через несколько различных вызовов 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?

Вернуться на верх