2009-11-05 22 views
6

¿Alguien puede decirme cómo usar Uploadify para cargar directamente a Amazon S3?Usando Uploadify para POST directamente a Amazon S3

Mi código es el siguiente:

$('#fileInput').uploadify({ 
    'fileDataName' : 'file', 
    'uploader' : 'uploadify.swf', 
    'script' : 'http://BUCKET-NAME-GOES-HERE.s3.amazonaws.com/', 
    'cancelImg' : 'cancel.png', 
    'method' : 'post', 
    'auto'  : true, 
    'onError': function (a, b, c, d) { 
    alert('error '+d.type+": "+d.info + ' name: ' + c.name + ' size: ' + c.size); 
    }, 
    'scriptData' : { 
    'AWSAccessKeyId': "KEY-GOES-HERE", 
    'key': "${filename}", 
    'acl': "public-read", 
    'policy': "POLICY-STRING-GOES-HERE", 
    'signature': "SIGNATURE-GOES-HERE", 
    'success_action_status': '200' 
    } 
}); 

Mi cadena de la política (sin codificar) se ve así:

{ 
    "expiration": "2100-12-01T12:00:00.000Z", 
    "conditions": [ 
    {"acl": "public-read"}, 
    {"bucket": "BUCKET-NAME-GOES-HERE"}, 
    {"success_action_status" : 200}, 
    ["starts-with", "$filename", ""], 
    ["starts-with", "$folder", ""], 
    ["starts-with", "$key", ""], 
    ["content-length-range", 1, 209715200] 
    ] 
} 

Usando el código anterior en realidad me permite seleccionar un archivo, que aparece a continuación, para cargar (en algún lugar), pero no aparece nada en mi depósito S3 y no se devuelve ningún error a la consola JS.

El uso de un formulario HTML regular para publicar un archivo en el depósito S3 funciona bien.

¿Algún consejo?

Respuesta

3

De esta thread el foro uploadify:

<html> 
<head> 
<script type="text/javascript" src="jquery-1.3.2.min.js"></script> 
<script type="text/javascript" src="swfobject.js"></script> 
<script type="text/javascript" src="jquery.uploadify.v2.1.0.js"></script> 
<link rel="stylesheet" href="uploadify.css" type="text/css" media="screen" /> 
</head> 

<body> 
<form> 
<input id="fileInput" name="fileInput" type="file" /> 
</form> 
<script type="text/javascript">// <![CDATA[ 
    $(document).ready(function() { 
     $('#fileInput').uploadify({ 
     'fileDataName' : 'file', 
      'uploader' : 'uploadify.swf', 
      'script' : 'http://UPLOADBUCKET/', 
      'cancelImg' : 'cancel.png', 
      'auto'  : true, 
      'onError' : function(errorObj, q, f, err) { console.log(err); }, 

      'scriptData' : { 
       AWSAccessKeyId: "ACCESS_KEY", 
      key: "foo/${filename}", 
      acl: "public-read", 
      policy: "POLICY STRING" 
      signature: "SIGNATURE, 
       success_action_status: '200' 
      } 

      }); 
    }); 
// ]]></script> 
</body> 

</html> 

La base para la cadena de la política es la siguiente:

{ "expiration": "2100-12-01T12:00:00.000Z", 
"conditions": [ 
    {"acl": "public-read" }, 
    {"bucket": "UPLOADBUCKET" }, 
    {"success_action_status" : '200'}, 
    ["starts-with", "$filename", "" ], 
    ["starts-with", "$folder", "" ], 
    ["starts-with", "$key", "foo"], 
    ["content-length-range", 1, 209715200] 
    ] 
} 
+15

Sería mejor incluir una explicación de la solución, aunque sea un resumen rápido. – erikprice

+3

Enlace muerto :(Debería copiar la solución de pasta en SO en el futuro – Ralphleon

+0

@Codemonkey He actualizado el enlace/respuesta, gracias por eso! – Ciaran

0

El código java para guardar la imagen en s3cloud. agregue este código en su archivo uploadscript (como uploadify.php) tendrá su propio archivo de script uploadify.

AWSCredentials credentials = new AWSCredentials (_ACCESS_KEY, _SECRET_KEY);

log.info("oovfilepath : " + oovfilepath); 
    log.info("name : " + name); 
    S3Service s3Service = new RestS3Service(credentials); 
    S3Bucket s3Bucket = s3Service.createBucket(_BUCKET_NAME); 
    AccessControlList bucketAcl = s3Service.getBucketAcl(s3Bucket); 
    bucketAcl.grantPermission(GroupGrantee.ALL_USERS, 
      Permission.PERMISSION_READ); 

    InputStream input = new FileInputStream(oovfilepath); 

    S3Object s3Object = new S3Object(s3Bucket, name); 
    log.info("s3Object:" + s3Object); 

    s3Object.setAcl(bucketAcl); 
    s3Object.setDataInputStream(input); 

    log.info("s3Object:" + s3Object); 

    s3Service.putObject(s3Bucket, s3Object); 
1

me las arreglé para conseguir una carga directa a Amazon S3 con el ive de trabajo barra de progreso conseguido una demostración de trabajo aquí.

Si alguien está interesado, admitirá cubos y carpetas dentro del cubo trabajando en la producción de un complemento de WordPress para esto.

Esto está usando swfupload, aunque está trabajando en uploadify ill post cuando está listo.

http://www.isimpledesign.co.uk/blog/amazon-s3-direct-multiple-file-upload-progress-bar

+0

¿Alguna vez ha conseguido que esto funcione con Uploadify? Solo puedo hacer que funcione intermitentemente – Heath