2014-11-19 4 views
1

Я использую веб-службы Amazon S3 и не могу создать подкаталог на моем ковше.Как создать подкаталог в amazon s3 bucket

я хочу что-то подобное

когда пользователь загружать файлы, подкаталог создать на S3 Ковш с именем идентификатора пользователя и файлы хранятся в подкаталоге.

Я использую следующий код

AmazonS3Client s3Client = new AmazonS3Client("AWSAccessKey", "AWSSecretKey", Amazon.RegionEndpoint.APSoutheast1); 

    protected void btnUpload_Click(object sender, EventArgs e) 
    { 

     if (!string.IsNullOrEmpty(fileUpload.FileName)) 
     { 
      //Saving File to local disk folder. 
      string filePath = Server.MapPath("aa") + "\\" + fileUpload.FileName; 
      string fileExtension = fileUpload.FileName.Substring(fileUpload.FileName.LastIndexOf(".") + 1); 
      fileUpload.SaveAs(filePath); 
      string contentType = GetContentType(fileExtension);  

      //Push the given object into S3 Bucket 
      PutObjectRequest objReq = new PutObjectRequest 
      { 
       Key = fileUpload.FileName, 
       FilePath = filePath, 
       ContentType = contentType, 
       BucketName = "datastore.MyData", 
       CannedACL = S3CannedACL.Private,    

      }; 

      PutObjectResponse response = s3Client.PutObject(objReq); 
      if (response.ETag != null) 
      { 
       string etag = response.ETag; 
       string versionID = response.VersionId; 
       Response.Write("<script>alert('File uploaded to S3 Bucket Successfully.');</script>"); 
      } 
      //Deleting Localy Saved File 
      if (File.Exists(filePath)) 
      { 
       File.Delete(filePath); 
      } 
     } 
    } 
    private string GetContentType(string fileExtension) 
    { 
     string contentType = string.Empty; 
     switch (fileExtension) 
     { 
      case "bmp": contentType = "image/bmp"; break; 
      case "jpeg": contentType = "image/jpeg"; break; 
      case "jpg": contentType = "image/jpg"; break; 
      case "gif": contentType = "image/gif"; break; 
      case "tiff": contentType = "image/tiff"; break; 
      case "png": contentType = "image/png"; break; 
      case "plain": contentType = "text/plain"; break; 
      case "rtf": contentType = "text/rtf"; break; 
      case "msword": contentType = "application/msword"; break; 
      case "zip": contentType = "application/zip"; break; 
      case "mpeg": contentType = "audio/mpeg"; break; 
      case "pdf": contentType = "application/pdf"; break; 
      case "xgzip": contentType = "application/x-gzip"; break; 
      case "xcompressed": contentType = "applicatoin/x-compressed"; break; 
     } 
     return contentType; 
    } 

Пожалуйста, помогите мне достичь этого.

ответ

1

В s3 нет папок, только key/value пар. Ключ может содержать косые черты ("/"), и это будет отображаться как папка в консоли управления, но программно это не папка, это значение String.

мы используем FileKey с символом '/' в конце, чтобы показать, что вы хотите создать папку.

PutObjectRequest objReq = new PutObjectRequest 
      { 
       Key = "Name of the folder you want to create/" fileUpload.FileName, 
       FilePath = filePath, 
       ContentType = contentType, 
       BucketName = "datastore.MyData", 
       CannedACL = S3CannedACL.Private,    

      }; 
+0

рабочий штраф :) – Gitz

0

Вы также можете использовать этот метод.

string S3FileDir = "/Demo/Test/"; 

    TransferUtility fileTransferUtility = new TransferUtility(keyId,secretekey,RegionEndpoint.USWest);    
        fileTransferUtility.Upload(localFilePath, BucketName + S3FileDir);