Alors comme dit dans les commentaires. Le matériel de référence est sous les exemples de code. Astuce consiste à couper le fichier en morceaux qui sont inférieurs à la limite de téléchargement. Cette méthode peut être étendue au point que lorsqu'un téléchargement de fichier est interrompu, vous pouvez continuer sur la dernière partie connue. :-)
Classe JavaScript de base pour aider à télécharger le fichier, détermine les morceaux à envoyer à un serveur PHP.
function fileUploader() {
// Called when the file is selected
this.onFileSelected = function() {
// Read file input (input type="file")
this.file = this.fileInput.files[0];
this.file_size = this.file.size;
this.chunk_size = (1024 * 1000);
this.range_start = 0;
this.range_end = this.chunk_size;
this.slice_method = 'slice';
this.request = new XMLHttpRequest();
// Start uploading
this.upload();
};
this.upload = function()
{
var self = this,
chunk;
// Last part reached
if (this.range_end > this.file_size) {
this.range_end = this.file_size;
}
// Chunk the file using the slice method
chunk = this.file[this.slice_method](this.range_start, this.range_end);
// Open a XMLHttpRequest
var endpoint = "/url/to/php/server/for/processing";
this.request.open('PUT', (endpoint));
this.request.overrideMimeType('application/octet-stream');
this.request.send(chunk);
// Make sure we do it synchronously to prevent data corruption
this.request.onreadystatechange = function()
{
if (self.request.readyState == XMLHttpRequest.DONE && self.request.status == 200) {
self.onChunkComplete();
}
}
};
this.onChunkComplete = function()
{
if (this.range_end === this.file_size)
{
// We are done, stop uploading
return;
}
this.range_start = this.range_end;
this.range_end = this.range_start + this.chunk_size;
this.upload();
};
}
Et pour le bit PHP:
...
$out = fopen("{$filePath}.partial", "a+");
fwrite($out, file_get_contents("php://input"));
fclose($out);
...
avertissement Big ici, assurez-vous de valider correctement et prendre des mesures de sécurité pour assurer la sécurité de vos clients fonction télécharger. Vous écrivez l'entrée PHP brute dans un fichier.
Lorsque le téléchargement est terminé, vous pouvez renommer le fichier en son nom d'origine, y compris l'extension correcte.
Documents de référence:
http://creativejs.com/tutorials/advanced-uploading-techniques-part-1/index.html
https://secure.php.net/manual/en/wrappers.php.php
En bref .. il est briser le fichier en petits morceaux à l'aide d'un processeur, télécharger les fichiers en utilisant des méthodes conventionnelles (comme vous le feriez normalement télécharger un fichier), append l'entrée dans un fichier temporaire. Certains pièges que j'ai rencontrés envoyaient des paramètres supplémentaires et similaires au point de terminaison, évitez ceux qui sont ajoutés au fichier et cela corrompra votre fichier.
Si votre hôte ne vous permet pas de modifier ces paramètres pour répondre à vos besoins, trouvez un autre hôte :) – flauntster
J'aimerais beaucoup, mais c'est l'hôte de mon client .. – FutureCake
Si c'est trop grand, commencez à chunking! :-) Vous pouvez couper le fichier en morceaux de petite taille et les ajouter à un fichier avec fwrite. –