2010-07-30 6 views
2

Что эквивалентно переменной PHP $ _FILES в C#? Или, по крайней мере, то, что обращается к файлам таким же образом. У меня есть форма загрузки, которую я не могу изменить, и вам нужно выяснить, как добраться до этих файлов.

ответ

9

Взгляните на Request.Files, например:

foreach (HttpPostedFile item in Request.Files) 
{ 
    var filename = item.FileName; 

    var fileBytes = new byte[item.ContentLength]; 
    item.InputStream.Read(fileBytes, 0, item.ContentLength); 

    // fileBytes now contains the content of the file 
    // filename contains the name of the file 
} 
+0

Почему downvote без комментариев относительно того, почему ? – Rob

+1

Downvoted, потому что использование 'Stream.Read()' является ошибкой: оно может не читать всю длину содержимого. Вам нужно будет использовать цикл; или вы можете создать экземпляр 'MemoryStream', а затем использовать' item.InputStream.CopyTo() '. – Timwi

+0

@Rob: потому что может потребоваться несколько человек чуть более 21 секунды, чтобы написать осмысленный, не-глупый комментарий. – Timwi

2

У вас будет HttpRequest объект передается в обработчику, не так ли? Просто доступ Files свойства этого объекта:

for (int i = 0; i < request.Files.Count; i++) 
{ 
    var file = request.Files[i]; 
    // Do something with this file, for example: 
    file.SaveAs(Path.Combine(someDirectory, file.FileName)); 
} 
0

Вы можете также использовать иногда (например, с Uploadify) параметр HttpPostedFileBase:

Ex:

public ActionResult UploadPicture(HttpPostedFileBase fileData){ 
    img = Image.FromStream(fileData.InputStream, true, true); 
}