அமேசான் இணையச்சேவைகள் – நிரல்வழிச் செயல்முறை – பகுதி 2

கோப்பினைப் பதிவேற்றுதல்

சென்ற பதிவில், நிரல்வழியாக ஒரு கொள்கலனை உருவாக்கினோம். ஆனால் அக்கொள்கலன் இப்போது காலியாக இருக்கிறது. அதில் ஒரு கோப்பினைப் பதிவேற்றலாம். இதற்காக, PutObjectRequest என்ற கோரிக்கையைத் தயாரிக்கவேண்டும். இக்கோரிக்கைக்குத் தேவையான அடிப்படை விசயங்கள் கீழே:

  • BucketName – கொள்கலனின் பெயர்.
  • Key – நாம் பதிவேற்றும் பொருளின் அணுக்கத்திறப்பு
  • InputStream – பதிவேற்றுகிற கோப்பு
  • ContentType – உள்ளடக்க வகை
  • CannedACL – இப்பொருளின் அணுக்கக்கட்டுப்பாட்டுப் பட்டியல்

S3க்கான கிளையன்ட்டை உருவாக்குவதற்கான நிரல், நம்மிடம் ஏற்கனவே இருக்கிறது. எனவே, மேற்கண்ட தரவிடங்களை நிரப்பி, PutObjectRequest கோரிக்கையை உருவாக்கி அனுப்பினால் போதுமானது.

    public async Task<bool> Upload(string bucketName, string fileName)
    {
            var filePath = Directory.GetCurrentDirectory() + "/" + fileName;
            Stream fileStream = File.OpenRead(filePath);

            using (var client = ClientFactory.CreateS3Client())
            {
                var request = new PutObjectRequest
                {
                    BucketName = bucketName,
                    CannedACL = S3CannedACL.PublicRead,
                    Key = "key-for-s3",
                    InputStream = fileStream,
                    ContentType = "image/jpg"
                };

                try
                {
                    var result = await client.PutObjectAsync(request);
                    return result.HttpStatusCode == HttpStatusCode.OK;
                }
                catch (AmazonS3Exception)
                {
                    return false;
                }
            }
     }

இங்கே, sample.jpg என்ற கோப்பினைத் திறந்துபடித்து, அதனை InputStream என்ற தரவிடத்திற்கான மதிப்பாகக் கொள்ளலாம். மேற்கண்ட செயற்கூற்றின் முதலிருவரிகள், இதனைச் செய்கின்றன.

var filePath = Directory.GetCurrentDirectory() + "/" + fileName;
Stream fileStream = File.OpenRead(filePath);

ContentType என்பது நாம் பதிவேற்றும் கோப்பின் உள்ளடக்கத்தை வகைப்படுத்துவதற்குப் பயன்படுகிறது. படங்களைப் பதிவேற்றுகிறோமா, ஆவணங்களைப் பதிவேற்றுகிறோமா என்பதை இத்தரவிடத்தில் குறிப்பிடலாம். எடுத்துக்காட்டில், நாம் ஒரு படத்தைப் பதிவேற்றுவதால், “image/jpg” என கொடுத்திருக்கிறோம்.

Key என்ற தரவிடம் நாம் பதிவேற்றும் கோப்பினை தனிப்பட்ட முறையில் அடையாளம் காண்பதற்குப் பயன்படுகிறது. எடுத்துக்காட்டுக்காக, “key-for-s3” என்ற எளிய மதிப்பினைப் பயன்படுத்தியிருக்கிறோம். ஆனால், நடைமுறையில், ஒரு செயலியில் பதிவேற்றப்படும் பலநூறு கோப்புகளுக்கு தனிப்பட்ட அடையாளக் குறியீட்டை உருவாக்குவதற்கு, GUID ஐப்பயன்படுத்தலாம்.

Key = Guid.NewGuid()

கொள்கலனில் கோப்பு உள்ளதா என சரிபார்த்தல்

கொள்கலனை உருவாக்கி, அதில் ஒரு கோப்பினையும் பதிவேற்றியாயிற்று. இப்போது நமது கோப்பு, சரியாகப் பதிவேற்றப்பட்டுள்ளதா என எவ்வாறு அறிவது? S3 வலைத்தளத்தில் உள்நுழைந்து சரிபார்க்கலாம். நிரல் வழியாக அறிந்துகொள்ளமுடியுமா? முடியும். GetObjectMetadataRequest என்ற கோரிக்கையைப் பயன்படுத்தலாம்.


        public async Task<bool> KeyExists(string bucketName, string key)
        {
            using (var client = ClientFactory.CreateS3Client())
            {
                try
                {
                    var result = await client.GetObjectMetadataAsync(new GetObjectMetadataRequest
                    {
                        BucketName = bucketName,
                        Key = key
                    });
                    return result.HttpStatusCode == HttpStatusCode.OK;
                }
                catch (AmazonS3Exception)
                {
                    return false;
                }
            }
        }

GetObjectMetadataRequest என்ற கோரிக்கை, கொள்கலனின் பெயர், பொருளுக்கான அணுக்கத்திறப்பு ஆகியவற்றை எடுத்துக்கொண்டு, அப்பொருளைப் பற்றிய தரவுகளைத் தருகிறது. இதன் பதிலின் நிலைக்குறியீட்டைக்கொண்டு, நாம் கோரும்பொருள் கொள்கலனில் உள்ளதா இல்லையா என அறியலாம்.

வலைத்தளத்தில் உள்நுழைந்து நமது கோப்பு சரியாக பதிவேற்றப்பட்டிருக்கிறதா என, பின்வரும் படத்தில் சரிபார்க்கலாம்.

%d bloggers like this: