0

MvcFileUploader 1.3.2 http://www.nuget.org/packages/MvcFileUploader/を使用すると、デモではアップロードされたファイルがサーバーに保存されません。

私はVS2010を使用しています。

複製するには、新しい Web プロジェクトを作成し、nuget パッケージを取得します

PM> Install-Package MvcFileUploader

プロジェクトを実行し、デモに移動します

http://localhost/MvcUploaderTest/Demo

コントロールを使用してファイルをアップロードします。私は小さな jpg を使用しています。JSON の結果が返されるはずです。最初のエントリはエラーで、私の場合は次のようになります。

 {"files":[{"error":null,...

アップロード ディレクトリを確認し、ファイルがアップロードされたかどうかを確認します。

~/Content/uploads/

アプリケーションまたはログにエラーまたは例外はありません。誰でもこのデモを動作させることができますか?

これは、素敵な jquery ファイル アップローダーを使用する便利なパッケージのようです。かみそり用の Html ヘルパーがあり、サムネイルを作成し、アップロードされたファイルをエンティティに関連付けることができます。http://backload.org/の使用を検討しましたが、はるかに重く、より多くの構成のようです。

ありがとう

編集 これが返されたJSONです

{
"files": [{
    "error": null,
    "name": "C:\\MvcApplication2\\MvcApplication2\\Content\\txt.jpg",
    "size": 286054,
    "type": "image/bmp",
    "url": "/MvcUploaderTest/DownloadFile?fileUrl=/Content/uploads/C:\MvcApplication2\MvcApplication2\Content\txt.jpg\u0026mimetype=image/bmp",
    "delete_url": "/MvcUploaderTest/DeleteFile?entityId=1234\u0026fileUrl=/Content/uploads/C:\\MvcApplication2\\MvcApplication2\\Content\\txt.jpg",
    "thumbnail_url": "/Content/uploads/C:\\MvcApplication2\\MvcApplication2\\Content\\txt.jpg?width=80\u0026height=80",
    "delete_type": "POST",
    "FullPath": "C:\\MvcApplication2\\MvcApplication2\\Content\\uploads/C:\\MvcApplication2\\MvcApplication2\\Content\\txt.jpg",
    "SavedFileName": "C:\\MvcApplication2\\MvcApplication2\\Content\\txt.jpg",
    "Title": "txt"
}]

}

4

1 に答える 1

1

IE8を使用しているようです

問題は、Request.Files[0].FileName が、IE8 から投稿された場​​合にファイルのフル パスを提供することです。

Request.Files[0].FileNameは値C:\MvcApplication2\MvcApplication2\Content\txt.jpgを取得します

一方、IE10 を含むすべての最新のブラウザーは、パスなしでアップロードされているファイル名のみを提供します。

Request.Files[0].FileNameは値txt.jpgを取得します

ただし、この HttpPostedFileBase.FileName プロパティが Mvc フレームワークによってどのように実装されているかはわかりません。

MvcFileUploader は StorageDirectory と共にこの名前を使用してファイルを保存するため、IE8 の場合は失敗します。

修理:

MvcUploaderTestController.UploadFile で、この行を変更します

//overriding defaults
//x.FileName = Request.Files[i].FileName; //original
x.FileName = new FileInfo(Request.Files[i].FileName).Name;

これでファイルが保存されます。

ただし、IE8 の場合、アクションから返された json の結果もダウンロードしようとするため、進行状況が常に表示されます。実際、Blueimp プラグインは IE8 の iframe を使用してファイルをアップロードしようとします https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation

Acceptヘッダーに基づいたコンテンツタイプのテキスト/プレーンで応答を送信する必要があります

ありがとう

于 2013-11-01T00:03:47.060 に答える