Невозможно загрузить изображение (React native, Laravel) - PullRequest
0 голосов
/ 30 августа 2018

Я пытался это некоторое время, но безуспешно

Back-конец

public function createInspection(Request $request) {
   $path = Storage::disk('public')->putFile('bin_images', new File($request->file('image')));
   return $path;    
}

Клиент

data.append("image", {
  uri: this.state.images[0].path,
  type: this.state.images[0].mime,
  size: this.state.images[0].size,
  name: filename
});

this.props.sendInspection(data)

Сервис (укороченный)

const res = await axios.post(url, data, {
    headers: {
      Authorization: `Bearer ${token}`,
      Accept: "application/json",
      "Content-Type": "multipart/form-data"
    }
  });

Я не уверен, что это как-то связано с тем, что путь не распознается (например, путь к изображению), например дорожка : /private/var/mobile/Containers/Data/Application/B6FEB0FD-F9C8-4088-B15F-99D27A818C76/tmp/react-native-image-crop-picker/7BD81594-30E0-4E00-919C-4F353BBDE46F.jpg

Я получаю эту ошибку

message: "The file "" does not exist", exception: "Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException", file: "/Users/ysr/tza-project/vendor/symfony/http-foundation/File/File.php", line: 37, file: "/Users/ysr/tza-project/vendor/symfony/http-foundation/File/MimeType/MimeTypeGuesser.php", line: 116

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

проблема, кажется, с вашим бэкэндом, проверьте документацию .

вы должны сделать что-то вроде этого:

public function update(Request $request)
{
    $path = $request->file('image')->store('images');

    return $path;
}

и, если вы хотите использовать putFile, тогда можете использовать:

$path = Storage::putFile('images', $request->file('image'));

и если необходимо заменить диск, то:

$path = Storage::disk('public')->putFile('images', $request->file('image'));
0 голосов
/ 30 августа 2018

Я не знаю, реагируют очень хорошо, но кажется, что вы передаете только свойства изображения, но не файл изображения или данные изображения в байтах.

Попробуйте изменить код:

data.append("image", {
  uri: this.state.images[0].path,
  type: this.state.images[0].mime,
  size: this.state.images[0].size,
  name: filename
});

К этому коду:

data.append("image", {
  file: this.state.images[0],
  uri: this.state.images[0].path,
  type: this.state.images[0].mime,
  size: this.state.images[0].size,
  name: filename
});

или попробуйте изменить Content-Type на 'multipart/form-data; boundary=${data._boundary}'

Если ваше изображение base64, вам нужно сделать несколько изменений в API, как показано ниже:

$path = 'bin_images/file_name.jpeg';
$image = str_replace('data:image/png;base64,', '', $request->image);
$image = str_replace(' ', '+', $image);
Storage::put($path, base64_decode($image));
...