2010-09-23 5 views

Répondre

16
var file = Request.Files[0]; 
PutObjectRequest request = new PutObjectRequest(); 
request.BucketName = "mybucket" 
request.ContentType = contentType; 
request.Key = key; 
request.InputStream = file.InputStream; 
s3Client.PutObject(request); 
+0

Merci pour le bit de code, efface les choses pour moi aussi. – Chaddeus

1

Il s'agit probablement d'une chaîne codée en Base64, mais vérifiez la documentation S3. Si c'est le cas, vous devez utiliser Convert.ToBase64String() et lui passer le tableau d'octets.

Voici un exemple de code que vous pouvez essayer. Je ne l'ai pas testé, mais il devrait vous aider à obtenir la bonne idée:

if (Request.Files.Count >= 1) { 
    var file = Request.Files[0]; 
    var fileContents = new byte[file.ContentLength]; 
    file.InputStream.Read(fileContents, 0, file.ContentLength); 
    var fileBase64String = Convert.ToBase64String(fileContents); 

    // now you can send fileBase64String to the S3 uploader 
} 
+0

qui ne fonctionnait pas, mais qu'est-ce que le travail utilisait file.InputStream comme la propriété d'un InputStream Objet PutObjectRequest. Merci de votre aide! –

11

détail un peu plus avec l'utilisation de dossiers et d'accorder à tous les utilisateurs un accès en lecture seule. Html:

C#

HttpPostedFileBase file = Request.Files[0]; 
    if (file.ContentLength > 0) // accept the file 
     { 
      string accessKey = "XXXXXXXXXXX"; 
      string secretKey = "122334XXXXXXXXXX"; 
      AmazonS3 client; 
      using (client = Amazon.AWSClientFactory.CreateAmazonS3Client(accessKey, secretKey)) 
      { 
       MemoryStream ms = new MemoryStream(); 
       PutObjectRequest request = new PutObjectRequest(); 
     request.WithBucketName("mybucket") 
    .WithCannedACL(S3CannedACL.PublicRead) 
    .WithKey("testfolder/test.jpg").InputStream = file.InputStream; 
     S3Response response = client.PutObject(request); 
      } 

Plus de détails est disponible ici: http://bradoyler.com/post/3614362044/uploading-an-image-with-aws-sdk-for-net-c

+0

L'article du blog est un lien mort. – swbradshaw

0
   PurObjectRequest request = new PutObjectRequest() 
       { 
        BucketName = _bucketName, 
        CannedACL = S3CannedACL.PublicRead, 
        Key = string.Format("folderyouwanttoplacethefile/{0}", file.FileName), 
        InputStream = file.InputStream 
       }; 

       YourS3client.PutObject(request); 
+0

S'il vous plaît ajouter quelques explications sur la façon dont cela fonctionne. –