【发布时间】:2016-11-15 05:07:28
【问题描述】:
我尝试使用 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
如果我尝试使用 Postman 发布图片,/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目录。
【问题讨论】:
-
你能告诉我们文件夹的文件权限吗?
-
嗨@Ronald,我已经编辑了我的问题,Apache 和 PHP 实际上可以在
/tmp中写入文件 -
你确定吗?为什么用户和用户组仍然是“root root”?
-
是的,我可以使用 Postman 上传文件,临时文件已保存在
/tmp并使用我的 php 脚本将文件从/tmp复制到/tmp但带有新名称,所以如果我的php脚本可以在目录中写入文件,那一定没问题。 -
@Ronald,我尝试将所有者和组更改为
drwxrwxrwt 13 www-data www-data 4096 Nov 15 16:43 tmp/,但我遇到了同样的问题。
标签: php apache laravel xamarin multipartform-data