使用PHP将文件上传到AmazonS3最终会得到一个28字节的文件


Uploading files to Amazon S3 with PHP ends up with a 28 byte file

我正在做一个项目,用户可以将文件上传到存储在AmazonS3存储桶中的网站。

不过这并没有真正奏效。。服务器看到了这个文件,一切看起来都很好,除了文件在亚马逊上结束时只有28字节大。。

这是我迄今为止的代码:

控制器

public function uploadFile()
{
    $data['username'] = $this->input->cookie('username', TRUE);
    $data['pagetitle'] = "Upload file";
    $data['userid'] = $this->userid;
    $this->load->template('uploadFile', $data);
}
public function takeUpload()
{
    $config['upload_path'] = './images/screenshots/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['encrypt_name'] = TRUE;
    $this->load->library('upload', $config);
    $projectFileLoc = $_FILES['projectFile']['tmp_name'];
    $projectFileName = $_FILES['projectFile']['name'];
    if (!($this->upload->do_upload("previewImage")) && !($this->s3->putObject($projectFileLoc, '3dnation', $projectFileName, $this->s3->ACL_PUBLIC_READ)))
    {
        echo "Something went wrong...";
    }
    else
    {
        $imgData = $this->upload->data();
        $previewImage = $imgData['file_name'];
        //TODO: Add image to DB
    }
}

视图文件(uploadFile.php)

  <div class="row">
    <div class="col-xs-12 col-sm-12">
      <div class="jumbotron">
        <h1>Upload files</h1>
      </div>
    </div><!--/span-->
  </div><!--/row-->
  <div class="row">
    <div class "col-xs-12 col-sm-12">
        <form action="/home/takeUpload" method="POST" role="form" class="form-horizontal" enctype="multipart/form-data">
              <div class="form-group">
                <label for="title" class="col-sm-2 control-label">Title</label>
                <div class="col-sm-10">
                  <input type="text" class="form-control" id="title" placeholder="Title" name="title" required>
                </div>
              </div>
              <div class="form-group">
                <label for="description" class="col-sm-2 control-label">Description</label>
                <div class="col-sm-10">
                  <input type="textfield" class="form-control" id="description" placeholder="Enter a description here" name="description" required>
                </div>
              </div>
              <div class="form-group">
                <label for="projectFile" class="col-sm-2 control-label">Project/Scene files (accepted formats: zip, rar, 3ds)</label>
                <div class="col-sm-10">
                  <input type="file" class="form-control" id="projectFile" name="projectFile" required>
                </div>
              </div>
              <div class="form-group">
                <label for="previewImage" class="col-sm-2 control-label">Preview image</label>
                <div class="col-sm-10">
                  <input type="file" class="form-control" id="previewImage" name="previewImage" required>
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-offset-2 col-sm-10">
                  <button type="submit" class="btn btn-default">Upload</button>
                </div>
              </div>
        </form>
    </div>
  </div>

我正在用这个S3库用最新的Codeigniter构建它

怎么了?

必须用数组调用putObject,如果要使用文件,则必须调用"putObjectFile"函数:

检查类中的定义:

public static function putObjectFile($file, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $contentType = null)
{
     return self::putObject(self::inputFile($file), $bucket, $uri, $acl, $metaHeaders, $contentType);
}

原始库中的一个示例:

// Simple PUT:
if (S3::putObject(S3::inputFile($file), $bucket, $uri, S3::ACL_PRIVATE)) {
    echo "File uploaded.";
} else {
    echo "Failed to upload file.";
}

如您在文档中所见