Я впервые использую 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;
},
};