Comments 20
UFO just landed and posted this here
Не нужно.
Для больших файлов можно воспользоваться асинхронной загрузкой.
Для больших файлов можно воспользоваться асинхронной загрузкой.
0
UFO just landed and posted this here
Файл не всегда находиться на диске, в моем случае (не в примере выше) это был поток.
0
UFO just landed and posted this here
Не знаю, это надо тестить, у меня органичение на 1мб файлы от пользователей :)
-1
Файлы можно резать и отправлять будут кусками и можно выбирать на сколько потоков распараллеливать этот процесс. Я тестировал с фильмом на 1.4 гига, прошло без проблем.
0
А можно было бы посмотреть на код реализации?
0
как-то так
using (var client = new AmazonS3Client(this.settings.AwsAccessKey, this.settings.AwsSecretKey))
{
var transferUtilityConfig = new TransferUtilityConfig();
transferUtilityConfig.DefaultTimeout = this.settings.FileUploadTimeout * 1000;
transferUtilityConfig.NumberOfUploadThreads = 1;
using (var transferUtility = new TransferUtility(client, transferUtilityConfig))
{
var transferUtilityUploadRequest = new TransferUtilityUploadRequest();
transferUtilityUploadRequest.WithBucketName(this.settings.BucketName)
.WithFilePath(filePath)
.WithKey(fileIndex.ToString())
.WithPartSize(this.settings.FileUploadPartSize * 1024);
transferUtility.Upload(transferUtilityUploadRequest);
}
}
+1
Не должен он отжирать 1 гб памяти. Файловые потоки в дотнете устроены таким образом, что создается буфер (по умолчанию 4 кб кажется), который считывается. Когда буфер заполнен, его содержимое сбрасывается в файл (flush). Именно размер этого буфера вы и устанавливаете, когда задаете размер потока.
Так что кушаться память должна только под буфер.
Так что кушаться память должна только под буфер.
+1
UFO just landed and posted this here
Вы написали:
>А разве при использовании потока не нужно явно задавать размер?
>Странно. А в SDK для Java написано:…
>А гигабайтный файл нормально получается загрузить таким образом?
Ответ был на это.
Не знаю как в яве, но в дотнет (в статье речь о нем идет) с этим проблем не будет, и определять размер файла не обязательно. Это скорее нужно что бы человеку показать сколько качается и сколько осталось, если файл большой, но это уже другая история.
>А разве при использовании потока не нужно явно задавать размер?
>Странно. А в SDK для Java написано:…
>А гигабайтный файл нормально получается загрузить таким образом?
Ответ был на это.
Не знаю как в яве, но в дотнет (в статье речь о нем идет) с этим проблем не будет, и определять размер файла не обязательно. Это скорее нужно что бы человеку показать сколько качается и сколько осталось, если файл большой, но это уже другая история.
+1
Да, не обратил внимание что определение размера — это требование SDK. Но к зажор памяти явное не указание размера вызвать не может.
+1
UFO just landed and posted this here
UFO just landed and posted this here
Собственно я говорил не про абстрактный поток, а про реализацию файловых потоков в дотнете, т.к. именно их использовали в статье, и мне показалось (видимо ошибочно) что вы спросили про возможность ошибочного поведения в представленном примере.
В общем случае это момент который нужно учитывать, но как я уже сказал, в данном примере с этим проблемы возникать не будут.
Думаю теперь мы друг друга понял :)
В общем случае это момент который нужно учитывать, но как я уже сказал, в данном примере с этим проблемы возникать не будут.
Думаю теперь мы друг друга понял :)
+1
Я бы еще отметил, что совместно с s3 хранилищем может возникнуть необходимость использовать CloudFront для авторизованного доступа к определенному контенту. CloudFront кэширует файлы к которым было обращение, поэтому если в s3 обновился файл, а кэш на CloudFront еще не истек (по умолчанию сутки), то вы получите старый файл. Когда мы с таким столкнулись, то нашли два варианта решения проблемы:
1) можно отправить запрос на CloudFront для обновления кэша, у этого метода есть ограничения:
— выполняется не сразу, а в течении минут 10-20
— ограничение на 3 одновременных запроса
2) (именно этим вариантом мы и воспользовались) называть файлы уникальным именем и при обновлении файла удалять старый, а новый создавать с новым именем. Мы использовали guid, такая схема вполне себе работоспособна.
1) можно отправить запрос на CloudFront для обновления кэша, у этого метода есть ограничения:
— выполняется не сразу, а в течении минут 10-20
— ограничение на 3 одновременных запроса
2) (именно этим вариантом мы и воспользовались) называть файлы уникальным именем и при обновлении файла удалять старый, а новый создавать с новым именем. Мы использовали guid, такая схема вполне себе работоспособна.
0
Также пользуюсь вторым вариантом, только старые файлы некоторое время не удаляю, что бы не бились недавние ссылки, например, со сторонних ресурсов (у меня веб приложение).
0
Only those users with full accounts are able to leave comments. Log in, please.
Интегрируем Amazon S3 в .Net приложение