ホームページ >バックエンド開発 >PHPチュートリアル >thinkphp3.1で複数のファイルをアップロードするときに、画像とドキュメントを別のフォルダーに保存するにはどうすればよいですか?

thinkphp3.1で複数のファイルをアップロードするときに、画像とドキュメントを別のフォルダーに保存するにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-06-23 13:54:52950ブラウズ

Thinkphp3.1 画像とドキュメントをアップロードして個別に保存するにはどうすればよいですか?


ディスカッションに返信 (解決策)

ファイルの接尾辞に基づいてアップロード ディレクトリの選択を決定します

ファイルの接尾辞に基づいてアップロード ディレクトリの選択を決定します


$upload->savePath= './Public /image/home/ news/';

if(!$upload->upload()) {//アップロード エラー メッセージ
$this->error($upload->getErrorMsg()); {// アップロードに成功しました アップロードされたファイルの情報を取得します
$info = $upload->getUploadFileInfo();
}
設定できるアップロードディレクトリは 1 つだけではないでしょうか?初めて。
thinkphp3.1 は対応するソリューションを提供していないため、自分で設計する必要があります

UploadFile クラスを継承し、save メソッドをオーバーライドできます
独自のアップロード クラスを使用して完成させることもできます

ファイルサフィックス $type


if ($type == '.jpg'){
$upload->savePath= './Public/image/home/ new1/'
if(!$upload->upload( )) {// アップロード エラー プロンプト エラー情報 t $this- & gt; error ($ Upload-& gt; geterrormsg ());
} Else {// アップロードされたファイル情報
$ info = $ GetupLoadfileInfo; (); }
} else if ($type == '.txt'){
$upload->savePath= './Public/image/home /new2/'; ()) {// アップロード エラー メッセージ
$this->error($upload->getErrorMsg())
}else{// $info =
}

写真、ドキュメント、そして2つのファイル?


ファイルのサフィックスを取得できる場合 $type

if ($type == '.jpg'){

$upload->savePath= './Public/image/home/ new1/'; ! $upload->upload()) {// アップロード エラー メッセージ
$this->error($upload->getErrorMsg());
}else{// アップロードされたファイル情報を取得します

$info = $upload->getUploadFileInfo();
}
}else if ($type == '.txt'){
$upload->savePath= './Public/image/home /new2/'; !$upload->upload()) {//アップロード エラー メッセージ
$this->error($upload->getErrorMsg());
}else{// アップロード成功 アップロードされたファイル情報を取得します
$info = $upload->getUploadFileInfo();
}
}


複数のファイルを同時にアップロードする場合、複数のファイルフィールドがあるはずですよね。
a974b784b2cd00a6ebbfaffe2a91c0fd
3477b48cfed9ff8c473fc2ca348bcd0f
これは単なるファイル上の判断ではないでしょうか?

UploadFile.class.php ファイルを変更する意思がある場合は、状況は好転します getSaveName メソッドを変更します (行 408 付近)

$saveName = $rule().".".$filename['extension'] ;
$saveName = $rule($filename).".".$filename['extension']; に変更します
次に、

$upload->savePath = '';$upload->saveRule = 'myFunction';

関数
function myFunction($filename) {  $p = in_array($filename['extension'], array('gif', 'jpg', 'png')) ? '图片路径' : '文档路径';  return $p . $filename['name'];}
を定義します
サフィックスは後で追加されるため、$filename['name 】お好みに変形できます

如果你愿意修改 UploadFile.class.php 文件的话,事情还是有转机的
把 getSaveName 方法中的(408行附近)
$saveName = $rule().".".$filename['extension'];
改成
$saveName = $rule($filename).".".$filename['extension'];

然后

$upload->savePath = '';$upload->saveRule = 'myFunction';

定义函数
function myFunction($filename) {  $p = in_array($filename['extension'], array('gif', 'jpg', 'png')) ? '图片路径' : '文档路径';  return $p . $filename['name'];}

由于之后还会加上后缀,所以 $filename['name'] 怎么变形你可随意


import('ORG.Net.UploadFile');
$upload = new UploadFile();// 实例化上传类
$upload->maxSize = 3145728;
$upload->savePath = '';
$upload->saveRule = 'myFunction';
if(!$upload->upload()) {// 上传错误提示错误信息
$this->error($upload->getErrorMsg());
}else{// 上传成功 获取上传文件信息
$info =  $upload->getUploadFileInfo();
}



private function getSaveName($filename) {
        $rule = $this->saveRule;
        if(empty($rule)) {//没有定义命名规则,则保持文件名不变
            $saveName = $filename['name'];
        }else {
            if(function_exists($rule)) {
                //使用函数生成一个唯一文件标识号
                $saveName = $rule($filename).".".$filename['extension'];
            }else {
                //使用给定的文件名作为标识号
                $saveName = $rule.".".$filename['extension'];
            }
        }
        if($this->autoSub) {
            // 使用子目录保存文件
            $filename['savename'] = $saveName;
            $saveName = $this->getSubName($filename).$saveName;
        }
        return $saveName;
    }






function my_filename() {
return date('ymdHis',time()).'_'.mt_rand();
}

function myFunction($filename) {
$p = in_array($filename['extension'], array('gif', 'jpg', 'png')) ? './Public/image/home/img/' : './Public/image/home/file/';
return $p . $filename[my_filename()];
}




改了,这三个地方,提示上传路径不存在。

是空的,我在上传目录不存在上一句输出了下。

既然你的 ./Public/image/home/ 是公共的,那么就
$upload->savePath = './Public/image/home/';
函数里只留 'img/' : 'file/'

既然你的 ./Public/image/home/ 是公共的,那么就
$upload->savePath = './Public/image/home/';
函数里只留 'img/' : 'file/'


版主大大,路径可以用了,不过现在是名字是空的了。
文件已经存在!./Public/image/home/img/.jpg

return $p . $filename[my_filename()];
应为
return $p . my_filename();

可直接写作

return $p . date('ymdHis_').mt_rand();

return $p . $filename[my_filename()];
应为
return $p . my_filename();

可直接写作

return $p . date('ymdHis_').mt_rand();

モデレーターに感謝します。初めてフレームワークを使用しましたが、いくつかの問題はモデレーターによって解決されました。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。