Файл данных формы возвращает ноль в laravel / lumen при использовании ax ios от реагировать - PullRequest
2 голосов
/ 12 февраля 2020

Я впервые использую React Native и Laravel.

Я пытаюсь создать форму загрузки в React Native до люмен API .

Когда я пытаюсь загрузить файл в Lumen , используя Почтальон , он работает нормально. Но при использовании Ax ios in React Native :

$request->file('file')

возвращает

null

public function store(Request $request) {
    $this->validate($request, [
        "file" => 'required|file',
        "from" => 'required',
        "to" => 'required',
        "subject" => 'required',
        "doc_date" => 'required',
        "doc_type" => 'required',
        "doc_number" => 'required',
    ]);

    $file = $request->file('file');

    $fileName = $file->getClientOriginalName();

    $saved_name = uniqid() . '_' . $fileName;

    $path = "uploads" . DIRECTORY_SEPARATOR . "documents" . DIRECTORY_SEPARATOR;

    $file->move($path, $saved_name);

    $document = new Document();

    $document->from = $request->input("from");
    $document->to = $request->input("to");
    $document->subject = $request->input("subject");
    $document->doc_date = $request->input("doc_date");
    $document->doc_type = $request->input("doc_type");
    $document->doc_number = $request->input("doc_number");
    $document->file_path = $path . $saved_name;

    $document->save();

    return response()->json(['document' => $document], 201);
}

## Клиент

async uploadDocument(document, file) {
    // document is some form data
    // document: {
    //     from: 'me@mail.com',
    //     to: 'someone@gmail.com',
    //     doc_date: '2020-02-01',
    //     ....
    // }    


    // file from react-native-document-picker
    // file: {
    //     fileName: 'blablabla.pdf',
    //     type: 'blablabla/blabla',
    //     uri: 'content://blablabla',
    // }


    let resp;

    try {
      resp = await axios.post(
        `${API_ENDPOINT}/documents`,
        helper.createFormData(file, document),
        {
          headers: {
            Accept: 'application/json',
            'Content-Type': 'multipart/form-data',
          },
        },
      );
    } catch (e) {
      console.log(`Axios error: ${e.message}`);
      throw e;
    }

    console.log(`Server response: ${JSON.stringify(resp.data)}`);

    return resp;
  },

## Помощник

export default {
  createFormData(file, body) {
    const data = new FormData();

    data.append('file', {
      name: file.fileName,
      type: file.type,
      uri: file.uri,
    });

    Object.keys(body).forEach(key => {
      data.append(key, body[key]);
    });

    return data;
  },
};
...