今回は、Thinkphp5+uploadify を使用してファイルアップロードを実装する方法と、Thinkphp5+uploadify を使用してファイルアップロードを実装する注意事項について説明します。以下は実際的なケースです。
これが私にとって初めてのサーバーサイド開発です。勉強しながらOTAバックエンドサーバーを作成しようとしましたが、ファイルのアップロードとプログレスバーの表示を実現するのに非常に苦労しました。いくつかの問題が発生しました:
1. 大きなファイルのアップロードに失敗しました2. アップロードのキャンセル1.
publicplug-insuploadify などのアップロード コードをプロジェクトにダウンロードします。
2. フロントエンド スクリプトは次のとおりです。
クライアントは、version_id 割り当てメソッドを最初にコントローラーで割り当てる必要があります。 キャンセルマッチングは表示できません、uploadify.cssのbackground: url('uploadify-cancel.png')
を修正する必要があります
uploadifyのアップローダの書き方に注意してください<form enctype="multipart/form-data" method="post" >
<input type="file" name="uploadify" id="uploadify" multiple="true" />
</form>
<script type="text/javascript">
<?php $timestamp = time();?>
var maxSize = 1024 * 1024*1024;//1G
$(function() {
$('#uploadify').uploadify({
'debug' : false,
<span style="white-space:pre"> </span> 'fileSizeLimit ': maxSize,
'formData' : {
'timestamp' : '<?php echo $timestamp;?>',
'token' : '<?php echo md5('unique_salt' . $timestamp);?>',
<span style="white-space:pre"> </span>'version_id': "{$version_id}"
},
'swf' : '/public/plug-ins/uploadify/uploadify.swf',
<span style="white-space:pre"> </span>'cancelImg':'/public/plug-ins/uploadify/uploadify-cancel.png',
'uploader' : '{:url("Package/upload")}',
<span style="white-space:pre"> </span>'fileTypeDesc' : 'zip文件',
<span style="white-space:pre"> </span>'fileTypeExts' : '*.zip',
<span style="white-space:pre"> </span> 'multi': false
});
});
</script>
background: url('uploadify-cancel.png')
注意uploadify 中uploader的写法
public function upload(){ $verifyToken = md5('unique_salt' . $_POST['timestamp']); if (!empty($_FILES) && $_POST['token'] == $verifyToken) { $tempFile = $_FILES['Filedata']['tmp_name']; /* $targetFolder = '/public/uploads'; // Relative to the root $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; $targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name']; // Validate the file type $fileTypes = array('jpg','jpeg','gif','png','zip'); // File extensions $fileParts = pathinfo($_FILES['Filedata']['name']); if (in_array($fileParts['extension'],$fileTypes)) { move_uploaded_file($tempFile,$targetFile); echo '1'; } else { echo 'Invalid file type.'; }*/ $version = model("Version")->retrieve_by_version($_POST['version_id']); if($version){ $file = new File($tempFile,'rw'); $hash_code = $file->hash(); $time = date("Y-m-d-i-s",$_POST['timestamp']); $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads'.DS.$version['project_name'].DS.$version['version_name'],'update_'.$time.'.zip'); if($info){ // 成功上传后 获取上传信息 echo $info->getExtension(); echo $info->getSaveName(); echo $info->getFilename(); }else{ // 上传失败获取错误信息 echo $file->getError(); } }else{ echo '找不到对应版本'; } } }
3. 后端脚本对应控制器 Package 的upload函数
注意上传文件的获取方法,不能使用Thinkphp5 官方文档那种获取方式。
保存文件名不能带特殊符号
修改php.ini: upload_max_filesize = 1024M
post_max_size=48
php.ini を変更します: upload_max_filesize = 1024M
post_max_size=48
サービスを再起動します
この記事の事例を読んでください。方法については、さらに興味深い情報については、php 中国語 Web サイトの他の関連記事にご注目ください。
推奨書籍:
JS 配列と JSON オブジェクトを動的に追加、変更、削除する方法
以上がThinkphp5+uploadify を使用してファイルをアップロードする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。