0

I am trying to capture a CSV file in my Request within my controller. I have been reading the documentation on using the file system in Laravel but it seems to return NULL.

Inside of my controller:

public function index(Request $request)
    {
        $file = $request->file('dataframe'); # This returns null every time
        if(isset($file)):

            $dataset = new CsvDataset($file, 1);
            $vectorizer = new TokenCountVectorizer(new WordTokenizer());
            $tfIdfTransformer = new TfIdfTransformer();

            $samples = [];
            foreach ($dataset->getSamples() as $sample)
                $samples[] = $sample[0];

            $vectorizer->fit($samples);
            $vectorizer->transform($samples);

            $tfIdfTransformer->fit($samples);
            $tfIdfTransformer->transform($samples);

            $dataset = new ArrayDataset($samples, $dataset->getTargets());
            $randomSplit = new StratifiedRandomSplit($dataset, 0.1);

            $classifier = new SVC(Kernel::RBF, 10000);
            $classifier->train($randomSplit->getTrainSamples(), $randomSplit->getTrainLabels());

            $predictedLabels = $classifier->predict($randomSplit->getTestSamples());

            $viewVar = (object) [
                'labels' => $predictedLabels,
                'score'  => Accuracy::score($randomSplit->getTestLabels(), $predictedLabels)
            ];

            return view('home')->with('prediction', $viewVar);

        endif;

        return view('home');
    }

Inside of my view:

<p>You can upload your dataframe below.</p>
    <form method='GET'>
        <input type='file' name='dataframe'>
        <button type='submit' name='upload'>Predict</button>
    </form>
@if (isset($prediction))
    <p> Score: {{ $prediction->score }} </p>
@endif

When I var_dump() the request, I can see the languages.csv file I upload. How can I access this file within the $request variable?

Jaquarh
  • 6,493
  • 7
  • 34
  • 86

1 Answers1

2

If you want to submit a document, you must use POST and enctype :

<form method='POST' enctype="multipart/form-data">
    <input type='file' name='dataframe'>
    <button type='submit' name='upload'>Predict</button>
</form>
Vincent Decaux
  • 9,857
  • 6
  • 56
  • 84
  • Ah, I see. So, I cannot submit this using GET? I'll have to use POST? – Jaquarh Jan 03 '19 at 13:29
  • Since GET appends the form data to the current URL, no. It will only contain the name of the file, not the file content. GET data is limited around 2048 chars, so you guess you can't put a file in this. – Vincent Decaux Jan 03 '19 at 13:32
  • @Jaquarh i think this could be very much helpful regarding your doubts : https://stackoverflow.com/questions/15201976/file-uploading-using-get-method – Kul Jan 03 '19 at 13:32
  • After updating it to POST, including the `enctype`, this is working. Thank you for this answer, I'll accept when I can. – Jaquarh Jan 03 '19 at 13:34