我刚将这个插件附加到我的cakephp项目中: https://github.com/josegonzalez/cakephp-upload
我花了很多时间才意识到它是将文件上传到 webroot \ files \ model_name \ filename文件夹,起初我认为没有上传文件。 数据库看起来像:
ID | DESCR |文件名|文件路径
我尝试了一切修改输入参数,但没有发生任何事情是将文件一遍又一遍地复制到:webroot \ files \ model_name \ filename。我试图清空缓存但也没有用。
public $actsAs = array(
'Upload.Upload' => array(
'path' => '{ROOT}{DS}webroot{DS}img{DS}{model}{DS}{field}{DS}',
'filename'=> array(
)
);
此外:
public $actsAs = array(
'Upload.Upload' => array(
'filename'=> array(
'path' => '{ROOT}{DS}webroot{DS}img{DS}{model}{DS}{field}{DS}',
)
)
);
此外:
class User extends AppModel {
public $actsAs = array(
'Upload.Upload' => array(
'filename' => array(
'fields' => array(
'dir' => 'photo_dir'
)
)
)
);
}
此时我认为它根本不起作用。所以我修改了文件名但是我得到了sql错误,所以它必须工作到这个:
'Upload.Upload' => array(
'filename' => array(
我花了很多时间找到解决方案(在沙发上,到处都是谷歌)。但是我不知道为什么我无法更改上传文件夹..
UPDATE1: 做了一个小小的研究:
class UploadBehavior extends ModelBehavior {
public $defaults = array(
'rootDir' => null,
'pathMethod' => 'primaryKey',
'path' => '{ROOT}webroot{DS}files{DS}{model}{DS}{field}{DS}',
..
但是我不能通过我的模型修改路径参数,在这里我可以改变它并且效果很好。
答案 0 :(得分:0)
对于文件上传是足够的原始php,只需创建一个包含 enctype =“multipart / form-data”属性的表单,其中包含一个或多个类型为的输入和使用简单的php方法“move_uploaded_file”将其保存到您喜欢的位置。
以下是示例表单:
[HttpPost]
[album]
public ActionResult Contact2(string one, string two)
{
var req = this.Request;
var res = this.Response;
UriBuilder uriBuilder = new UriBuilder("http://" + req.Url.Authority + req.Url.LocalPath);
NameValueCollection query = HttpUtility.ParseQueryString(uriBuilder.Query);
query.Add("album", "first");
uriBuilder.Query = query.ToString();
string url = req.Url.AbsolutePath.ToString();
return this.Redirect(uriBuilder.Uri.OriginalString);
}
和php方法:
<form action="yourscript.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload File" name="submit">
</form>
但在CakePhp中,您必须使用$ this-&gt; request-&gt;数据,而不是$ _FILES,因为:
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], 'yourpreferredpath/yourfile')