jqueryfileupload 플러그인과 AWS의 통합 작업을하고 있습니다. 업로드 섹션을 성공적으로 완료했지만 지금은 이미지 크기 조정 기능을 통합하려고합니다.
this 플러그인 코드를 사용하고 있습니다. 아래에 나와있는 최소 코드를 사용하여 예제를 설정했습니다.
이미지를 S3에 업로드하기 위해 AWS php sdk와 JqueryUpload 플러그인을 통합
index.html을
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>jQuery File Upload Example</title>
</head>
<body>
<input id="fileupload" type="file" name="files[]" data-url="aws/" multiple>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="js/vendor/jquery.ui.widget.js"></script>
<script src="js/jquery.iframe-transport.js"></script>
<script src="js/jquery.fileupload.js"></script>
<script>
$(function() {
$('#fileupload').fileupload({
dataType: 'json',
done: function (e, data) {
$.each(data.result.files, function (index, file) {
$('<p/>').text(file.name).appendTo(document.body);
});
}
});
});
</script>
</body>
</html>
awssdk.php은 ---이 이미지를 선택하면 내가 전화 파일입니다.
<?php
$bucket = "my bucket name";
$subFolder = ""; // leave blank for upload into the bucket directly
if (!class_exists('S3'))require_once('S3.php');
//AWS access info
if (!defined('awsAccessKey')) define('awsAccessKey', 'my key');
if (!defined('awsSecretKey')) define('awsSecretKey', 'my secret key');
$options = array('image_versions' => array(
'small' => array(
'max_width' => 1920,
'max_height' => 1200,
'jpeg_quality' => 95
),
'medium' => array(
'max_width' => 800,
'max_height' => 600,
'jpeg_quality' => 80
),
'thumbnail' => array(
'max_width' => 80,
'max_height' => 80
)
)
);
//instantiate the class
$s3 = new S3(awsAccessKey, awsSecretKey);
function getFileInfo($bucket, $fileName) {
global $s3;
$fileArray = "";
$size = $s3->getBucket($bucket);
$furl = "http://" . $bucket . ".s3.amazonaws.com/".$fileName;
$fileArray['name'] = $fileName;
$fileArray['size'] = $size;
$fileArray['url'] = $furl;
$fileArray['thumbnail'] = $furl;
$fileArray['delete_url'] = "server/php/index.php?file=".$fileName;
$fileArray['delete_type'] = "DELETE";
return $fileArray;
}
function uploadFiles($bucket, $prefix="") {
global $s3;
if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') {
return "";
}
$upload = isset($_FILES['files']) ? $_FILES['files'] : null;
$info = array();
if ($upload && is_array($upload['tmp_name'])) {
foreach($upload['tmp_name'] as $index => $value) {
$fileTempName = $upload['tmp_name'][$index];
$fileName = (isset($_SERVER['HTTP_X_FILE_NAME']) ? $_SERVER['HTTP_X_FILE_NAME'] : $upload['name'][$index]);
$fileName = $prefix.str_replace(" ", "_", $fileName);
// $response = $s3->create_object($bucket, $fileName, array('fileUpload' => $fileTempName, 'acl' => AmazonS3::ACL_PUBLIC, 'meta' => array('keywords' => 'example, test'),));
$response = $s3->putObjectFile($fileTempName,$bucket,'images/'.$fileName,S3::ACL_PUBLIC_READ);
//print_r($response);
if ($response==1) {
$info[] = getFileInfo($bucket, $fileName);
} else {
echo "<strong>Something went wrong while uploading your file... sorry.</strong>";
}
}
} else {
if ($upload || isset($_SERVER['HTTP_X_FILE_NAME'])) {
$fileTempName = $upload['tmp_name'];
$fileName = (isset($_SERVER['HTTP_X_FILE_NAME']) ? $_SERVER['HTTP_X_FILE_NAME'] : $upload['name']);
$fileName = $prefix.str_replace(" ", "_", $fileName);
//$response = $s3->create_object($bucket, $fileName, array('fileUpload' => $fileTempName, 'acl' => AmazonS3::ACL_PUBLIC, 'meta' => array('keywords' => 'example, test'),));
$response = $s3->putObjectFile($upload['tmp_name'],$bucket,$fileName,S3::ACL_PUBLIC_READ);
if ($response->isOK()) {
$info[] = getFileInfo($bucket, $fileName);
} else {
echo "<strong>Something went wrong while uploading your file... sorry.</strong>";
}
}
}
header('Vary: Accept');
$json = json_encode($info);
$redirect = isset($_REQUEST['redirect']) ? stripslashes($_REQUEST['redirect']) : null;
if ($redirect) {
header('Location: ' . sprintf($redirect, rawurlencode($json)));
return;
}
if (isset($_SERVER['HTTP_ACCEPT']) && (strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false)) {
header('Content-type: application/json');
} else {
header('Content-type: text/plain');
}
return $info;
}
?>
은 내가 사용하는 S3 클래스입니다.
JqueryUploadPLugin은 이미지를 업로드하기 위해 서버 측 PHP 클래스와 함께 제공됩니다. 그러나 AWS를 사용하면서 API를 사용하여 이미지를 업로드해야하고 플러그인 코드가 작동하지 않습니다. 위에서 언급 한 것처럼 업로드 부분을 구현했지만 upload.ie 전에 이미지 축소판 및 다른 크기의 이미지를 만드는 데 도움이 필요합니다. 이미지를 업로드하려면 3 가지 변형 ex: original,1024x768,100x100
이 필요합니다.
UploadHandler.php에는 크기 조정 된 이미지를 만들기위한 기능이 거의 없습니다. 예 : 크기 조정을위한 protected function create_scaled_image($file_name, $version, $options)
. 나는 OO php와 AWS를 처음 접했을 때 이러한 함수들을 통합하는데 막혔다.
어느 하나 비슷한 짓을하고 입력이 도움이 될 것입니다 줄 수
당신이 awssdk.php에 코드 내부 UploadHandler 클래스의 메소드를 사용하려고하는 것 같다 당신에게
정확히 붙어있는 부분을 언급하지 않았습니까? 이미 업로드가 작동하는 경우 섬네일을 만들기 위해 더 많은 코드를 추가하는 데 문제가 있습니까? – rineez
네,하지만 UploadHandler.php에서와 같은 기능을 사용하고 싶습니다. (링크를 추가했습니다.) 위대한 기능을 제공하는 멋진 기능을 가지고 있지만, 일부 종속성이 관련되어 있습니다. 그 함수들은 다음과 같습니다 : 스케일링 등을 위해'protected function create_scaled_image ($ file_name, $ version, $ options)'예 – KillABug