laravel-chunk-upload-example icon indicating copy to clipboard operation
laravel-chunk-upload-example copied to clipboard

Example project for laravel-chunk-upload

Laravel chunked upload example

This example covers all supported Laravel versions. This implementation will allow us to test all versions at once.

This repo contains full example for laravel-chunk-upload package.

  • Usage
  • Compatibility
  • Run tests
  • Example code
  • Testing your contribution
  • Adding new Laravel release

Install

git clone [email protected]:pionl/laravel-chunk-upload-example.git --recurse-submodules --remote-submodules
npm install --only=production

Usage

Install and run specific Laravel version. Use X.* version format.

node run.js "8.*"

Pass --ignore-example to ignore updating and building example Pass --verbose for debug info

open http://localhost:8000

Compatibility

Version PHP Run Tests
9.* 8.1-node-17 node run "9.*" node tests.js "9.*"
9.* 8.0-node-17 node run "9.*" node tests.js "9.*"
8.* 8.1-node-17 node run "8.*" node tests.js "8.*"
8.* 8.0-node-17 node run "8.*" node tests.js "8.*"
8.* 7.4-node-17 node run "8.*" node tests.js "8.*"
7.* 7.4-node-17 node run "7.*" node tests.js "7.*"

Tests

Pass --verbose for debug info

Run tests on all Laravel versions (install them before using it)

node tests.js

Run tests on desired Laravel version

node tests.js "8.*"

Tests locally

Run npm install without production.

  • In one terminal run php 7.\*/artisan serve --host=0.0.0.0 --port=8000
  • In second terminal run tests ./node_modules/.bin/codeceptjs run --steps
  • npm run test-debug will show browser while tests are running.

Docker-compose

  • Environment variables should be passed: IMAGE_VERSION (php version) and LARAVEL_VERSION.
  • abort-on-container-exit needs to be used to stop Laravel server.
IMAGE_VERSION=7.4 LARAVEL_VERSION=8.\* docker-compose -f docker-compose.yml -f docker-compose-tests.yml up --abort-on-container-exit

Running tests on latest Laravel release

I did not find a way how to install Laravel on master with the latest changes from framework -- let me know if you know how

Testing your contribution

Do not commit your changes - use pull request in main repo

  • Replace laravel-chunk-upload folder with your repository (clone your fork)

  • Maintainer can pull PR

    cd laravel-chunk-upload
    git checkout -b drjdr-master master
    git pull https://github.com/drjdr/laravel-chunk-upload.git master
    cd ..
    
  • Run tests on all versions node tests.js to ensure backward compatibility.

Adding a support for new Laravel release

Do not commit your changes - use pull request in main repo

  • Add a new version to versions.json file.
  • Add your changes to laravel-chunk-upload folder
  • Use setup and tests on new version node setup.js "7.\*" && node tests.js "7.\*"
  • Run tests on all versions node tests.js to ensure backward compatibility.

Example code

  • Controller - dynamic usage at ./example/src/Http/Controllers/UploadController.php
  • Views at ./example/resources/views/example/ - Here you can find basic layout for the providers.
  • Javascripts at ./example/resources/assets/js/ - Here you can find the initial setup for the providers.

Uploading to AMAZON s3 (or any other cloud storage)

  • It is recommended to upload the file in separate queue JOB. Uploading can take a time (for large files) and the request could get timed out.
  • It is important to stream the file to the cloud (not using file_get_contents) which would eat your memory.
  • Also don't forget to remove the uploaded file after the upload.

Example code found at ./example/sr/Http/Controllers/UploadController.php.

Contribution in example

  • If you make changes in assets, do not forget to call node compile.js to compile the changes and publish them to all version (you can also pass desired version)

TODO

  • Improve example controller
  • Add tests to dropzone
  • clean storage after tests
  • Add tests for paraller save

Copyright and License

laravel-chunk-upload-example was written by Martin Kluska and is released under the MIT License.

Copyright (c) 2017 and beyond Martin Kluska