Я нашел хороший пример в документации php .
Таким образом, код:
libxml_use_internal_errors(true);
$sxe = simplexml_load_string(" ");
if (false === $sxe) {
echo "Failed loading XML\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
И выход, как мы и ожидали:
Не удалось загрузить XML
Blank needed here parsing XML declaration: '?>' expected Opening and ending tag mismatch: xml line 1 and broken Premature end of data in tag broken line 1
public string Upload(HttpPostedFileBase FileData) {}
верен - файл, загруженный с помощью uploadify, будет привязан к FileData. Нет необходимости заходить в Request.Files для получения файла - это затрудняет имитацию и тестирование.
Если ваше действие вообще не запускается (например, попробуйте отладить и посмотрите, достигнута ли точка останова в методе), тогда ваша проблема, скорее всего, связана со значением 'script' - вы работаете в виртуальном каталоге? В таком случае вам нужно будет указать имя каталога впереди. Uploadify использует абсолютный путь.
т.е. 'script:' / virtual_directory / Placement / Upload '
прямо сейчас uploadify отправляет на http: // localhost / Placement / Upload .
также попробуйте использовать отладчик маршрута ( http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx ), чтобы проверить, где отображается ваш маршрут.
This isn't how I had to implement file upload at all. I had an action method with no parameters that used the current Request object to dive into the collection of posted files.
Some sample code from my implementation:
[AcceptVerbs(HttpVerbs.Post)]
public ContentResult Upload() {
if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0) {
HttpPostedFileBase postedFile = Request.Files[0];
// Do something with it
}
}
Of course, writing tests for this becomes a PITA. You have to mock several objects in order to get it to work, for example:
var mockHttpContext = mocks.StrictMock<HttpContextBase>();
var mockRequest = mocks.StrictMock<HttpRequestBase>();
var postedFile = mocks.StrictMock<HttpPostedFileBase>();
var postedFileKeyCollection = mocks.StrictMock<HttpFileCollectionBase>();
mockHttpContext.Expect(x => x.Request).Return(mockRequest).Repeat.Any();
mockRequest.Expect(x => x.Files).Return(postedFileKeyCollection).Repeat.Any();
postedFileKeyCollection.Expect(x => x[0]).Return(postedFile).Repeat.Any();
postedFileKeyCollection.Expect(x => x.Count).Return(1);
postedFile.Expect(f => f.ContentLength).Return(1024);
postedFile.Expect(f => f.InputStream).Return(null);
It would be easier to create an interface into the posted files and only mock that, with a concrete implementation injected into your controller using IoC.
I think this was largely based off of this post: Implementing HTTP File Upload with ASP.NET MVC including Tests and Mocks
Reading the documentation, it looks like it is sending an array of files. Have you tried:
public string Upload( HttpPostedFileBase[] fileData )
It's also possible that the default model binder won't work with HttpPostedFileBase and you'll either need to use Rory's mechanism or write your own model binder.
Проблема может заключаться в том, что вам нужно указать, что для действия, которое вы загружаете, установлено значение «Опубликовать» ... оно не будет работать с действием в качестве действия «Получить».
, это:
public string Upload(HttpPostedFileBase FileData)
{
//do something
}
Должно быть так:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Upload(HttpPostedFileBase FileData)
{
//do something
}
Также имейте в виду, что если вы используете это в разделе «авторизованный» своего сайта, вам следует поискать здесь известную ошибку с загрузкой и аутентификацией: http://geekswithblogs.net/apopovsky/archive/2009/05/06/working-around-flash-cookie-bug-in-asp.net-mvc.aspx
Также, в стороне, есть несколько способов обработки загрузки файлов в MVC (с использованием Request.Files в соответствии с предложением Рори Фицпатрика, а также с передачей файла HttpPostedFileBase в качестве аргумента в определении действия). Это не должно иметь большого значения для того, чтобы Uploadify заработал.