- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 symfony2 中使用 UploadedFile
类来上传图像文件。我允许使用 mime 类型 image/jpg
和 image/png
的图像。当我将 png 文件从我的系统上传到服务器时,它的 mime 类型会自动更改。我知道它发生了变化,因为当我发出这个命令时:
file --mime-type /home/mysuer/img.png
它给了我这个:
home/myuser/img.png: image/png
但是当我上传文件并打印 UploadedFile
对象时,它会给出以下输出:
Array
(
[media] => Symfony\Component\HttpFoundation\File\UploadedFile Object
(
[test:Symfony\Component\HttpFoundation\File\UploadedFile:private] =>
[originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => img.png
[mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => application/octet-stream
[size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 1246
[error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
[pathName:SplFileInfo:private] => /tmp/phpivgnne
[fileName:SplFileInfo:private] => phpivgnne
)
)
任何人都可以提出什么问题吗?
这是我的代码:
public function postFileAction(Request $request)
{
print_r($request->files->all());//Prints All files
$image = $request->files->get('media');
echo $image->getClientMimeType();exit; //Mime Type Information
if (empty($image)) {
throw new FileException('Invalid File, Please Select a Valid File.');
}
$uploader = $this->get('application.file_uploader');
if (!$this->container->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY')) {
//authenticated (NON anonymous users)
throw new InvalidParameterException('Invalid User, Please use valid credentials');
}
return $uploader->upload($image, $this->get('security.context')->getToken()->getUser()->getId());
}
PHP单元测试代码
public function testPostFile()
{
$file = tempnam(sys_get_temp_dir(), 'upl'); // create file
imagepng(imagecreatetruecolor(10, 10), $file); // create and write image/png to it
$image = new UploadedFile($file, 'new_image.png', 'image/png', 10, UPLOAD_ERR_OK);
$crawler = $this->client->request(
'POST', '/api/v1/files.json', array('submit' => 'Submit Form'), array('media' => $image)
);
$response = $this->client->getResponse();
$this->assertJsonResponse($response);
$this->assertContains('filename', $response->getContent());
print_r($response->getContent());exit;
$fileToken = json_decode($response->getContent());
$this->assertNotEmpty($fileToken->filename);
unlink($file);
unset($file, $image, $crawler, $response);
return $fileToken->filename;
}
我在命令提示符下使用 curl
来测试我的 REST Web 服务文件上传,如下所示:
curl -X POST myapi.com/app_dev.php/api/v1/files.json --form "media=@/home/myuser/img.png"
最佳答案
最后我得到了我的问题的解决方案,并将在 core-php 和 symfony2 中发布问题的答案。
核心 PHP(在 http://php.net/manual/en/features.file-upload.php 上找到):
// DO NOT TRUST $_FILES['upfile']['mime'] VALUE !!
// Check MIME Type by yourself.
$finfo = new finfo(FILEINFO_MIME_TYPE);
if (false === $ext = array_search(
$finfo->file($_FILES['upfile']['tmp_name']),
array(
'jpg' => 'image/jpeg',
'png' => 'image/png',
'gif' => 'image/gif',
),
true
)) {
throw new RuntimeException('Invalid file format.');
}
所以永远不要相信 $_FILES['upfile']['mime']
总是使用 fileinfo
这给了我线索。
对于 Symfony2:
所以我开始查看我的代码,发现我正在使用 $file->getClientMimeType()
,这不好,我们必须使用 $file->getMimeType()
使用 fileinfo
获取 mime 类型并给出正确的 mime 类型。
在getMimeType()
中使用MimeTypeGuesser
实例猜测mime类型,该实例使用finfo()
、mime_content_type()
和系统二进制"file"(按此顺序),具体取决于其中哪些可用。
谢谢大家的帮助:D
关于php - UploadedFile 的文件上传 mime 类型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26926319/
我目前正在开发一个应用程序,用户可以选择浏览和上传 Excel 文件,但我很难获取正在浏览的文件的绝对路径。因为位置可以是任何东西(Windows/Linux)。 import org.apache.
在 Ubuntu 服务器上部署我的 Laravel 代码后,我有以下函数返回空字符串: $package = $request->file('file'); dd($package->getPathn
这个问题在这里已经有了答案: How to use PrimeFaces p:fileUpload? Listener method is never invoked or UploadedFile
我阅读了以下 django 文档 UploadedFile.content_type The content-type header uploaded with thefile (e.g. text/
我正在寻找一个 javascript/jquery(无论哪种方式)来收集我上传的所有文件。 我有以下代码,其中 .afbeelding 是几个文件输入字段的类 var geuploadeAfbeeld
我有一个 Laravel 4.2 API,它在创建资源时接受文件上传。该文件检索与Input::file('文件') 现在我想编写一个脚本(也在 Laravel 中)来批量创建一些资源(所以我不能使用
我正在尝试从现有文件创建一个 UploadedFile。但它没有成功上传,也没有显示任何错误。 这是我的代码 $encoded_data = "This is a huge string";
我正在使用 上传文件(图片)在代码隐藏中我使用 UploadedFile.SaveAs("C://Path...")将图像保存在服务器上。 这是我的完整代码: protected void btnA
当我的表单被发送时 UploadedFile::getInstance($model, 'images') 返回 null。我还尝试了 UploadedFile::getInstanceByName(
我在 symfony2 中使用 UploadedFile 类来上传图像文件。我允许使用 mime 类型 image/jpg 和 image/png 的图像。当我将 png 文件从我的系统上传到服务器时
我正在使用 PrimeFaces 3.2,我应该在文件系统上存储一个文件。 现在,我知道 FileUploaded 类创建了一个临时文件,因此我可以使用 java.io.File 将其转换为真实文件。
我有以下函数定义: public function save(UploadedFile $file, string $fileSystemName) { $fs = $this->fileSy
我正在构建文件上传没有 Doctrine 并且没有通过我可用的注释或 YAML 进行验证。 Symfony 将上传的文件呈现为 Symfony\Component\HttpFoundation\Fil
我正在构建文件上传没有 Doctrine 并且没有通过我可用的注释或 YAML 进行验证。 Symfony 将上传的文件呈现为 Symfony\Component\HttpFoundation\Fil
我有一个包含 CSV 数据的巨大字符串。我想将其转换为 Excel 文件 (.xslx) 并将其另存为 UploadedFile/SimpleUploadedFile。我尽可能地用谷歌搜索并得出以下结
我正在学习本教程 http://symfony.com/doc/current/controller/upload_file.html但是 $file 没有被转换为 UploadedFile,它仍然是
PrimeFaces UploadedFile 仅公开 InputStream,不公开文件本身。处理流后如何删除它? 最佳答案 为此,PrimeFaces 在幕后使用 Apache Commons F
我尝试发送附件文件,但我得到 Cannot use object of type Illuminate\Http\UploadedFile as array 我使用 Laravel 5.4 有人知道我
有没有办法将字符串转换成ActionDispatch::Http::UploadedFile 我需要它能够在 API 请求中传递文件路径以处理将 excel 插入数据库,因为我想使用 rest API
我使用了与importing csv and excel Railscast类似的想法,但是由于该情节中的标准代码需要一些时间来处理(使用ActiveRecord为文件中的每一行创建新记录),我在He
我是一名优秀的程序员,十分优秀!