Browse Source

Add RemoveIncompleteUploadsAsync operation to remove incomplete uploads from server

pull/129/head
poornas 9 years ago
parent
commit
48efbccded
  1. 3
      Minio.Api/ApiEndpoints/CustomClientSettings.cs
  2. 2
      Minio.Api/ApiEndpoints/IObjectOperations.cs
  3. 36
      Minio.Api/ApiEndpoints/ObjectOperations.cs
  4. 28
      Minio.Api/MinioRestClient.cs
  5. 31
      Minio.Examples/Cases/RemoveIncompleteUpload.cs
  6. 1
      Minio.Examples/Minio.Examples.csproj
  7. 20
      Minio.Examples/Program.cs
  8. 6
      README.md

3
Minio.Api/ApiEndpoints/CustomClientSettings.cs

@ -4,9 +4,10 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Minio.ApiEndpoints
namespace Minio
{
class CustomClientSettings
{
}
}

2
Minio.Api/ApiEndpoints/IObjectOperations.cs

@ -15,6 +15,7 @@ namespace Minio
Task RemoveObjectAsync(string bucketName, string objectName);
Task<ObjectStat> StatObjectAsync(string bucketName, string objectName);
IObservable<Upload> ListIncompleteUploads(string bucketName, string prefix, bool recursive);
Task RemoveIncompleteUploadAsync(string bucketName, string objectName);
/*
* To be implemented
@ -26,7 +27,6 @@ namespace Minio
//accepts file instead of stream
Task CopyObjectAsync(string bucketName, string objectName, string objectSource, CopyConditions conditions);
//task RemoveObjects(string bucketName, Stream objectsList );
Task RemoveIncompleteUpload(string bucketName, string objectName);
*/
}
}

36
Minio.Api/ApiEndpoints/ObjectOperations.cs

@ -445,6 +445,33 @@ namespace Minio
}
/// <summary>
/// Remove incomplete uploads from a given bucket and objectName
/// </summary>
/// <param name="bucketName">Bucket to remove incomplete uploads from</param>
/// <param name="objectName">Key to remove incomplete uploads from</param>
public async Task RemoveIncompleteUploadAsync(string bucketName, string objectName)
{
var uploads = await this.ListIncompleteUploads(bucketName, objectName).ToArray();
foreach (Upload upload in uploads)
{
if (objectName == upload.Key)
{
await this.RemoveUploadAsync(bucketName, objectName, upload.UploadId);
}
}
}
private async Task RemoveUploadAsync(string bucketName, string objectName, string uploadId)
{
var path = bucketName + "/" + utils.UrlEncode(objectName) + "?uploadId=" + uploadId;
var request = new RestRequest(path, Method.DELETE);
var response = await this._client.ExecuteTaskAsync(this._client.NoErrorHandlers,request);
if (response.StatusCode != HttpStatusCode.NoContent)
{
this._client.ParseError(response);
}
}
/// <summary>
/// Removes an object with given name in specific bucket
/// </summary>
/// <param name="bucketName">Bucket to list incomplete uploads from</param>
@ -462,10 +489,11 @@ namespace Minio
}
}
/// <summary>
/// Gets stats on a specific object in a bucket
/// <param name="bucketName">Bucket to list incomplete uploads from</param>
/// <param name="objectName">Key of object to list incomplete uploads from</param>
/// <returns>Status object </returns>
/// Tests the object's existence and returns metadata about existing objects.
/// </summary>
/// <param name="bucketName">Bucket to test object in</param>
/// <param name="objectName">Name of the object to stat</param>
/// <returns>Facts about the object</returns>
public async Task<ObjectStat> StatObjectAsync(string bucketName, string objectName)
{
var request = new RestRequest(bucketName + "/" + utils.UrlEncode(objectName), Method.HEAD);

28
Minio.Api/MinioRestClient.cs

@ -49,7 +49,7 @@ namespace Minio
return String.Format("Minio ({0};{1}) {2}", System.Environment.OSVersion.ToString(), arch, release);
}
}
private static string CustomUserAgent = "";
private string CustomUserAgent = "";
private string FullUserAgent
{
get
@ -136,6 +136,12 @@ namespace Minio
return true;
}
/// <summary>
///Sets app version and name
/// </summary>
/// <param name="appName"></param>
/// <param name="appVersion"></param>
/// <returns></returns>
public void SetAppInfo(string appName, string appVersion)
{
if (string.IsNullOrEmpty(appName))
@ -230,23 +236,7 @@ namespace Minio
this.client.ExecuteAsync(request, callback);
}
/// <summary>
/// old - remove
/// </summary>
/// <param name="bucketName"></param>
/// <returns></returns>
public bool BucketExists(string bucketName)
{
var request = new RestRequest(bucketName, Method.HEAD);
var response = client.Execute(request);
if (response.StatusCode != HttpStatusCode.OK)
{
ParseError(response);
}
return true;
}
internal void ParseError(IRestResponse response)
{
if (response == null)
@ -340,7 +330,9 @@ namespace Minio
_defaultErrorHandlingDelegate(response);
}
}
internal delegate void ApiResponseErrorHandlingDelegate(IRestResponse response);
}

31
Minio.Examples/Cases/RemoveIncompleteUpload.cs

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Minio.Examples.Cases
{
class RemoveIncompleteUpload
{
//Remove incomplete upload object from a bucket
public async static Task Run(MinioRestClient minio)
{
try
{
var bucketName = "bucket-name";
var bucketObject = "bucket-object";
bucketName = "mountshasta";
bucketObject = "newmulti-225";
await minio.Objects.RemoveIncompleteUploadAsync(bucketName, bucketObject);
Console.Out.WriteLine("object-name removed from bucket-name successfully");
}
catch (Exception e)
{
Console.WriteLine("[Bucket-Object] Exception: {0}", e);
}
}
}
}

1
Minio.Examples/Minio.Examples.csproj

@ -62,6 +62,7 @@
<Compile Include="Cases\MakeBucket.cs" />
<Compile Include="Cases\PutObject.cs" />
<Compile Include="Cases\RemoveBucket.cs" />
<Compile Include="Cases\RemoveIncompleteUpload.cs" />
<Compile Include="Cases\RemoveObject.cs" />
<Compile Include="Cases\StatObject.cs" />
<Compile Include="Program.cs" />

20
Minio.Examples/Program.cs

@ -31,17 +31,19 @@ namespace Minio.Examples
var minioClient = new MinioRestClient(endPoint,
accessKey: accessKey,
secretKey: secretKey).WithSSL();
Cases.MakeBucket.Run(minioClient).Wait();
Cases.ListBuckets.Run(minioClient).Wait();
//Set app Info
minioClient.SetAppInfo("app-name", "app-version");
Cases.BucketExists.Run(minioClient).Wait();
Cases.RemoveBucket.Run(minioClient).Wait();
Cases.GetObject.Run(minioClient).Wait();
Cases.StatObject.Run(minioClient).Wait();
Cases.PutObject.Run(minioClient).Wait();
Cases.ListIncompleteUploads.Run(minioClient);
// Cases.MakeBucket.Run(minioClient).Wait();
// Cases.ListBuckets.Run(minioClient).Wait();
// Cases.BucketExists.Run(minioClient).Wait();
// Cases.RemoveBucket.Run(minioClient).Wait();
//Cases.GetObject.Run(minioClient).Wait();
//Cases.StatObject.Run(minioClient).Wait();
//Cases.PutObject.Run(minioClient).Wait();
//Cases.ListIncompleteUploads.Run(minioClient);
Cases.RemoveIncompleteUpload.Run(minioClient).Wait();
Console.ReadLine();
}

6
README.md

@ -128,8 +128,14 @@ Click on FileUploader project and Start
* [GetObject.cs] (./Minio.Examples/Cases/GetObject.cs)
* [PutObject.cs] (./Minio.Examples/Cases/PutObject.cs)
* [StatObject.cs](./Minio.Examples/Cases/StatObject.cs)
* [RemoveObject.cs](./Minio.Examples/Cases/RemoveObject.cs)
* [RemoveIncompleteUpload.cs](./Minio.Examples/Cases/RemoveIncompleteUpload.cs)
#### Full Examples : Presigned Operations
#### Full Examples : Client Custom Settings
* [SetAppInfo] (./Minio.Examples/Program.cs)
### How to run these examples?
### On Windows

Loading…
Cancel
Save