MultipartUploadBundle

Symfony multipart/related/mixed/alternative content type handler (rfc1341).

MIT License

Downloads
14.8K
Stars
22
Committers
7

Bot releases are visible (Hide)

MultipartUploadBundle - 1.5.0 Latest Release

Published by goetas 9 months ago

MultipartUploadBundle - 1.4.0

Published by goetas 9 months ago

MultipartUploadBundle - 1.3.0

Published by goetas about 2 years ago

MultipartUploadBundle - 1.2.1

Published by goetas almost 3 years ago

MultipartUploadBundle - 1.2.0

Published by goetas about 3 years ago

  • split actual service from event listener #15
MultipartUploadBundle - 1.1.0

Published by goetas over 3 years ago

  • Allow Symfony5 and PHP8 #13
MultipartUploadBundle - 1.0.3

Published by goetas over 5 years ago

  • do not process multipart/form-data requests
MultipartUploadBundle - 1.0.2

Published by goetas over 5 years ago

  • Compatibility with Sf<4 uploaded files #9 (by @bigfoot90)
MultipartUploadBundle - 1.0.1

Published by goetas almost 6 years ago

Minor fixed on documentation and deprecation warning for symfony 4

MultipartUploadBundle - 1.0.0

Published by goetas almost 6 years ago

GoetasMultipartUploadBundle

Build Status
Latest Stable Version
Code Coverage
Scrutinizer Code Quality

Symfony multipart/related, multipart/alternative and multipart/mixed content type handler.

This bundle implements a subset of the https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html specifications
and allows you to deal with Content-Type: multipart/*; requests with Symfony.

Install

Run composer require goetas/multipart-upload-bundle

Add bundle to symfony (if not using symfony/flex)

Request format

A multipart/related request could look like this:

Host: localhost
Content-Type: multipart/related; boundary=19D523FB

--19D523FB
Content-Type: application/json

{
    "content": "Some JSON content"
}
--19D523FB
Content-Type: image/png
Content-Disposition: form-data; name="image"; filename="image.jpg"
Content-MD5: 314ca078416a9b27efbe338ac5a2f727

... binary content...
Content-Type: text/html
Content-Disposition: form-data; name="content"
Content-MD5: 314ca078416a9b27efbe338ac5a2f727

<a href="https://github.com/goetas/MultipartUploadBundle">HTML content</a>

--19D523FB
Content-Type: image/png
Content-Disposition: attachment; filename="image.jpg"
Content-MD5: 314ca078416a9b27efbe338ac5a2f727

... binary content...

--19D523FB
Content-Type: octet/stream
X-Custom-Header: header value

... binary content...

--19D523FB--

Usage

Controller

Body will not be decoded automatically, you can decode it by yourself or use FOSRestBundle to handle it transparently

public function (Request $request)
{
    if ('application/json' == $request->headers->get('content-type')) {
        $data = json_decode($request->getContent(), true);
    }
}

Form Fields

Parts with form-data; name= in Content-Disposition part's headers
will be treated like an regular uploaded file.

$html = $request->request->get('content');

Can be used with Symfony's form builder

$builder->add('content', TextAreaType::class);

Uploaded Files

Parts with form-data; name= and filename= in Content-Disposition part's headers
will be treated like an regular uploaded file.

$file = $request->files->get('image');

Can be used with Symfony's form builder

$builder->add('image', FileType::class);

Attachment Files

Parts with attachment; filename= in Content-Disposition part's headers
will be treated as an attachment file.

$attachment = $request->attributes->get('attachments')[0];

Related Parts

Parts without a filename will be treated as RelatedPart object.

$part = $request->attributes->get('related-parts')[0];
  • Get part's headers
$headers = $part->getHeaders()->all();
  • Get part's content
$content = $part->getContent();
  • Get part's content as resource
$content = stream_get_contents($part->getContent(true));
  • First part injected

By default, when a message is multipart/*, the first part will become the Symfony message content.
You can disable this by setting first_part_as_default to false.

$content = $request->getContent(); // content of the first part, not the whole message

Configurations

goetas_multipart_upload:
  first_part_as_default: true

Note

The code in this project is provided under the
MIT license.
For professional support
contact [email protected]
or visit https://www.goetas.com

Package Rankings
Top 12.58% on Packagist.org
Badges
Extracted from project README
Build Status Latest Stable Version Code Coverage Scrutinizer Code Quality