作者:zccst
注:上传文件是存放在数据库的一张表中。如果是存放在某一个文件路径下,则使用saveAs即可。
一、前端
<div id="upForms">
<form id="fileitemdiv1" action="<?php echo $this->createUrl('repairUpload'); ?>" method="post" enctype="multipart/form-data" target="upload_target">
<input type="file" name="repair_attached_file1" />
<input type="submit" name="submitBtn" value='立即上传' />
<span id="upload_repairinfo_success1" style="color:red;"></span>
<input type="hidden" name="selectedIndex" value="1" />
<!-- 记录上传成功后的id -->
<input type="hidden" name="upload_save_to_db_id" id="upload_save_to_db_id1" value="0" />
</form>
<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>
</div>
<div>
<input type="button" value="增加附件" onclick="addfile();">
<input type="hidden" id="up_success_file_ids" />
</div>
var filecount=1;
// 新增一个上传文件控件
function addfile(){
var filediv = document.getElementById("upForms");
var fileitemdiv = document.createElement("form");
filecount++;
var content = "<input type=file name=repair_attached_file"+
filecount + "> <input type=submit name=submitBtn value='立即上传' /> <a href='javascript:removefile("+
filecount + ");'>删除</a> <span id=upload_repairinfo_success"+
filecount + " style='color:red;'></span><input type=hidden value="+
filecount + " name=selectedIndex /> <input type=hidden name=upload_save_to_db_id id=upload_save_to_db_id"+
filecount + " value=0 />";
fileitemdiv.id = "fileitemdiv"+filecount;
fileitemdiv.method = "post";
fileitemdiv.enctype = "multipart/form-data";
fileitemdiv.target = "upload_target";
fileitemdiv.action = "<?php echo $this->createUrl('repairUpload'); ?>";
fileitemdiv.innerHTML = content;
filediv.appendChild(fileitemdiv);
}
//删除指定上传文件控件
function removefile(fileIndex){
var filediv = document.getElementById("upForms");
var fileitemdiv = document.getElementById("fileitemdiv"+fileIndex);
filediv.removeChild(fileitemdiv);
}
//回调成功
function successUpload(responseText,id,fileIndex){
// 1,获取值
var ids = document.getElementById("up_success_file_ids").value;
if(ids){
document.getElementById("up_success_file_ids").value = ids+','+id;
}else{
document.getElementById("up_success_file_ids").value = id;
}
// 2,本次上传成功,则覆盖之前上传成功的文件
document.getElementById("upload_save_to_db_id"+fileIndex).value = id;
// 3,提示上传成功
var spanObj = document.getElementById("upload_repairinfo_success"+fileIndex);
//spanObj.innerHTML = "上传成功";
spanObj.innerHTML = responseText;
}
//回调失败
function stopUpload(responseText,fileIndex){
// 提示
var spanObj = document.getElementById("upload_repairinfo_success"+fileIndex);
spanObj.innerHTML = responseText;
}
二、后端
public function actionRepairUpload(){
$index = $this->request->getParam("selectedIndex");
$pre_id = $this->request->getParam("upload_save_to_db_id");
$inputFileName = "repair_attached_file".$index;
$attach = CUploadedFile::getInstanceByName($inputFileName);
$retValue = "";
if($attach == null){
$retValue = "提示:不能上传空文件。";
}else if($attach->size > 2000000){
$retValue = "提示:文件大小不能超过2M。";
}else {
$retValue = '恭喜,上传成功!';
if($pre_id == 0){
$f = file_get_contents($attach->tempName);
$a = new Attachment();
$a->ref_type = "failParts";
$a->data = $f;
$a->file_path = $attach->name;
$a->save();
$cur_id = $a->id;
}else{
$trans = Yii::app()->db->beginTransaction();
try{
$f = file_get_contents($attach->tempName);
$a = new Attachment();
$a->ref_type = "failParts";
$a->data = $f;
$a->file_path = $attach->name;
$a->save();
$cur_id = $a->id;
$pre = Attachment::model()->findByPk($pre_id);
$pre->delete();
$trans->commit();
}catch(Exception $e){
$retValue = $e->getMessage();
$cur_id = 0;
$trans->rollback();
}
}
echo "<script type='text/javascript'>window.top.window.successUpload('{$retValue}',$cur_id,$index)</script>";exit();
}
echo "<script type='text/javascript'>window.top.window.stopUpload('{$retValue}',$index)</script>";
}
如果您觉得本文的内容对您的学习有所帮助,您可以微信:
分享到:
相关推荐
以下是对CUploadedFile类的详细解释以及如何在Yii中实现文件上传的步骤。 1. **CUploadedFile类**: CUploadedFile是一个模型类,它封装了一个通过HTTP POST请求上传的文件的信息。当你在表单中包含一个`...
`CUploadedFile`类是Yii中处理文件上传的核心,它可以从HTTP请求中获取上传文件的信息。你需要创建一个表单,包含一个`enctype="multipart/form-data"`的`<form>`元素,然后在后端处理上传的文件,如保存到服务器、...
14. **CUploadedFile**: 表示上传的文件对象,处理文件上传操作。 15. **CFlexiAuth**: 提供灵活的身份验证机制,支持多种认证策略。 手册中还涵盖了Yii的其他关键概念,如MVC架构、数据库访问(DAO和AR)、缓存...
这个实例展示了Yii框架中基本的文件上传流程,但实际项目中可能需要更复杂的处理,例如验证文件类型、大小,以及处理多文件上传等。在Yii2中,可以使用`yii\web\UploadedFile`类来处理上传文件,它提供了更多的便捷...
Yii 框架提供了一种简便的方式来处理文件和图片上传,特别是通过 `activeFileField` 控件。...通过适当的验证和处理,你可以确保上传的文件符合应用的要求,从而为用户提供安全、高效的文件上传体验。
Yii 框架是一个流行的 PHP 开发框架,用于构建高效、可扩展的 Web 应用程序。...这只是一个基本的实现,实际项目中可能需要考虑更多的细节,例如错误处理、文件类型验证、安全措施(防止恶意文件上传)以及优化性能等。
// 添加验证规则,例如验证文件类型和大小 ['upload', 'file', 'types' => 'jpg,jpeg,png,gif', 'maxSize' => 1024 * 1024 * 5], // 假设允许的文件大小为5MB ]; } // 其他方法... } ``` `UploadForm` 类通过 ...
需要注意的是,在配置文件上传功能时,务必遵循安全原则,对上传的文件进行严格的验证和过滤,防止上传恶意文件。同时,还需要对服务器目录的权限设置进行管理,确保上传的文件只能被授权的应用程序访问和操作,以...
2. 在控制器中处理文件上传,使用 `CUploadedFile` 处理上传的文件,并将其保存到服务器。 3. 视图部分创建表单,让用户选择文件并提交。 4. 可选地,通过扩展类添加额外的图片处理功能,如生成缩略图。 理解并掌握...