Как я заставляю плагин Uploadify jQuery работать с ASP.NET MVC?

Я нашел хороший пример в документации 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

35
задан Bill the Lizard 5 April 2013 в 01:50
поделиться

4 ответа

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 ), чтобы проверить, где отображается ваш маршрут.

20
ответ дан 27 November 2019 в 15:43
поделиться

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

2
ответ дан 27 November 2019 в 15:43
поделиться

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.

0
ответ дан 27 November 2019 в 15:43
поделиться

Проблема может заключаться в том, что вам нужно указать, что для действия, которое вы загружаете, установлено значение «Опубликовать» ... оно не будет работать с действием в качестве действия «Получить».

, это:

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 заработал.

10
ответ дан 27 November 2019 в 15:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: