Я пытаюсь загрузить файл на сервер с помощью приложения Xamarin.Forms.
var content = new MultipartFormDataContent();
content.Add(new StreamContent(new MemoryStream(img)), "file", "image.jpg");
httpClient.PostAsync(uri, MultipartFormDataContent);
Я получаю файл на сервере, используя PHP и класс Symfony UploadedFile.
Эта часть хорошо работает на моем локальном хосте (macOS Sierra Version 10.12.1
/ Apache/2.4.23 (Unix)
) когда я тестирую, я могу получить файл:
"file" => UploadedFile {#217 ▼
-test: false
-originalName: "image.jpg"-mimeType: "application/octet-stream"-size: 8112955
-error: 0
path: "/Applications/MAMP/tmp/php"filename: "phpWyUBHM"basename: "phpWyUBHM"pathname: "/Applications/MAMP/tmp/php/phpWyUBHM"extension: ""realPath: "/Applications/MAMP/tmp/php/phpWyUBHM"writable: false
readable: false
executable: false
file: false
dir: false
link: false
}
Конфигурация Apache:
upload_max_filesize 32M 32M
post_max_size 32M 32M
Так что я могу переместить файл, и это фактическое изображение, которое я загрузил.
Когда я пытаюсь сделать это на моем демонстрационном сервере (Ubuntu 14.04.5 LTS
/ Apache/2.4.7 (Ubuntu)
) полученный файл фактически пуст, его размер равен 0
"file" => UploadedFile {#217 ▼
-test: false
-originalName: "image.jpg"-mimeType: "application/octet-stream"-size: 0
-error: 0
path: "/tmp"filename: "phppFr9Pr"basename: "phppFr9Pr"pathname: "/tmp/phppFr9Pr"extension: ""realPath: false
writable: false
readable: false
executable: false
file: false
dir: false
link: false
}
Конфигурация Apache:
upload_max_filesize 1000M 1000M
post_max_size 1000M 1000M
Так что я думаю, что проблема в Apache, но я долго искал и не мог найти никаких подсказок, чтобы решить эту проблему.
Благодарю.
РЕДАКТИРОВАТЬ 1
Права доступа к каталогу / tmp:
drwxrwxrwt 13 root root 4096 Nov 15 14:19
Если я попытаюсь опубликовать изображение с почтальоном, /tmp
Каталог хорошо создан:
"file" => UploadedFile {#217
-test: false
-originalName: "image.jpg"-mimeType: "image/jpeg"-size: 8112955
-error: 0
path: "/tmp"filename: "php2LIEcm"basename: "php2LIEcm"pathname: "/tmp/php2LIEcm"extension: ""realPath: false
writable: false
readable: false
executable: false
file: false
dir: false
link: false
}
Это означает, что apache и php имеют права на запись в этом /tmp
каталог.
Разница в разрешениях /tmp
, Пользователь (например, Apache или php), который выполняет ваш скрипт, должен иметь права на write
в /tmp
а также read
от.
Других решений пока нет …