我一直试图让php在S3 bucket
中重命名图像。有三个阶段
第二步给我带来了麻烦。如果我将名称硬编码到PHP脚本中,那么它将找到源文件并重命名。 但是我无法使用从页面绘制的变量重命名文件。
以下是 HTML 按钮代码
<input type="file" id="file-chooser" />
<button onclick= "pass()" id="upload-button">Upload to S3</button>
<div id="results"></div>
这是 JS 代码
<script type="text/javascript">
var bucket = new AWS.S3({params: {Bucket: 'MY BUCKET'}});
var fileChooser = document.getElementById('file-chooser');
var button = document.getElementById('upload-button');
var results = document.getElementById('results');
button.addEventListener('click', function() {
var file = fileChooser.files[0];
if (file) {
results.innerHTML = '';
var filename = file.name;
var params = {Key: file.name, ContentType: file.type, Body: file};
bucket.upload(params, function (err, data) {
results.innerHTML = err ? 'ERROR!' : 'UPLOADED';
ajax_post();
});
} else {
results.innerHTML = 'Nothing to upload.';
}
}, false);
function pass() {
$.get("test.php");
return false;
}
function ajax_post() {
var ref = new
Firebase("https://MY FIREBASE .firebaseio.com/");
var authData = ref.getAuth();
// Create our XMLHttpRequest object
var fileChooser = document.getElementById('file-chooser');
var file = fileChooser.files[0];
var filename = file.name;
var userID = authData.uid;
var userID = USERS USER ID;
//alert($(this).attr('id'));
$.ajax({
type: "POST",
url: 'test.php',
data: { userID : userID },
data: { filename : filename },
success: function (data) {
alert("success!");
}
};
pass();
}
</script>
这是PHP。
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
$sourceBucket = "MY BUCKET";
$sourcename1 = $_POST['filename'];
$targetKeyname = $_POST['userID'];
$targetBucket = "MY BUCKET";
$s3 = S3Client::factory(array(
'key' => "MY KEY",
'secret' => "MY SECRET KEY"
));
$s3->copyObject(array(
'Bucket' => $targetBucket,
'Key' => $targetKeyname,
'CopySource' => "{$sourceBucket}/{$sourcename}",
));
?>
编辑添加 我一直在测试后进行测试。如果我将变量硬编码到PHP文件中就可以了。如果我将变量硬编码到JS脚本中则失败。 ajax正在运行php文件,它只是没有将变量传递给它。我已经尝试过在PHP方面使用和不使用ISSET,它每次都无法接收变量。
有什么想法吗?
答案 0 :(得分:1)
我怀疑这是你的问题var userID = USERS USER ID;
我不确定这些信息来自哪里。但是,如果没有看到html / js派生自哪里,很难确定问题。
如果其文本输入的id为userID,则应为:
<input type="text" name="userID" id="userID">
JS:
var userID = $("#userID").val();
AJAX更新
将BOTH
数据合并到一个对象中:
data: { userID : userID },
data: { filename : filename },
将成为
data: { userID : userID , filename : filename },
答案 1 :(得分:0)
我发现了问题所在。这是Firebase。 Firebase返回了我需要的值,但PHP脚本正在从AWS检索错误。我曾假设AJAX未能通过该值,但我只是对了一半。 AJAX失败了,因为它在那时没有值。我在上传发生之前加了3秒延迟,它运行正常。 Firebase只比PHP慢。