(на основе комментария выше, указывающего, что file
является экземпляром HttpPostedFileBase
в веб-приложении ...)
Я не знаю, откуда вы взяли Server.MapPath("~/Files")
, но если file
- это HttpPostedFileBase
, который был загружен в этот код веб-приложения, тогда он, скорее всего, находится в памяти, а не в вашей файловой системе. Или, в лучшем случае, это где-то в файловой системе в какой-то временной системной папке.
Поскольку ваш источник (содержимое переменной file
) является потоком, прежде чем вы попытаетесь взаимодействовать с файловой системой, вы должны увидеть, AWS API, который вы используете, может принимать поток. И похоже, что может.
if (file.ContentLength > 0)
{
var transferUtility = new TransferUtility(/* constructor params here */);
transferUtility.Upload(file.InputStream, bucketName, keyName);
}
Обратите внимание, что это полностью произвольно, я не очень знаком с взаимодействиями AWS. И вы обязательно захотите взглянуть на конструкторы на TransferUtility
, чтобы увидеть, какой из них соответствует вашему дизайну. Но дело в том, что вы сейчас хотите загрузить поток из файла, который вы уже загрузили в свое веб-приложение, а не хотите загрузить реальный файл из файловой системы. .
В качестве запасного варианта, если вы не можете заставить загрузку потока работать (а вам действительно стоит, это идеальный подход), тогда ваш следующий вариант, скорее всего, сначала сохранит файл, а затем загрузит его, используя метод, который вы есть сейчас. Поэтому, если вы ожидаете, что он будет в Server.MapPath("~/Files")
, вам нужно сначала сохранить его в этой папке, например:
file.SaveAs(Path.Combine(Server.MapPath("~/Files"), Path.GetFileName(file.FileName)));
Конечно, со временем эта папка может стать довольно полной и вы, вероятно, захотите его очистить.