RadUpload コントロールを使用して画像をアップロードし、JCrop 用に表示します。これらは単なる一時ファイルのアップロードであるため、一時フォルダーに配置します。ユーザーが同じ名前の画像をアップロードする可能性を防ぐために、保存するときに名前を変更します。
私の部分的な見解:
@(Html.Telerik().Upload()
.Name("attachments")
.Multiple((bool) false)
.ClientEvents(events => events
.OnSuccess(
@<text>
function(e) {
displayTempUpload(e);
}
</text>)
)
.Async(async => async
.Save("Add", "Image")
.AutoUpload((bool)true)
)
)
私のコントローラー:
public ActionResult Add(IEnumerable<HttpPostedFileBase> attachments)
{
var fileName = "";
foreach (var file in attachments)
{
fileName = Guid.NewGuid().ToString() + path.GetExtension(file.FileName);
var physicalPath = Path.Combine(Server.MapPath("~/temp"), fileName);
file.SaveAs(physicalPath);
}
return Content("");
}
ファイル名を変更しない場合、JQuery を使用してアップロードされた画像を表示できます。
function displayTempUpload(e) {
var info = getFileInfo(e);
var path = "/temp/" + info;
$("#img").attr("src", path);
}
function getFileInfo(e) {
return $.map(e.files, function (file) {
var info = file.name;
return info;
}).join(", ");
}
ただし、 onSuccess 関数に渡されるファイル オブジェクトは元のファイル名を保持します。ファイル名を変更したので、新しい値を何らかの方法で onSuccess 関数に渡すことはできますか?
コントローラ アクションの戻り値を変更してみAdd()
ましたが、保存処理でエラーが発生したと RadUpload コントロールが判断する結果になりました。onSuccess 関数の他のプロパティも調べましたe
が、何も役に立たないようです。