2

ビューに ActionLink ボタン 'ダウンロード' のあるリストがあり、リンクをクリックしたときにファイルをダウンロードするようにします。ファイルは私のプロジェクトのマップにあります。

意見:

<div id="right-column-links">
    <h2>Your active links</h2>
    @if (lstLinks.Count == 0)
    {
        <p>You have no active links yet.</p>
    }
    else
    {
        <table>
            @foreach (var item in lstLinks)
            {
                <tr>
                    <td>@Html.DisplayFor(model => item.Url)</td> 
                    <td>@Html.ActionLink("Put inactive", "LinkInActive", new { linkid=item.LinkId }, new { onclick = "return confirm('Are you sure you want this link inactive?');" })</td>
                    <td>@Html.ActionLink("Download Qrcode", "DownloadQrcode", new { linkid=item.LinkId })</td> 
                </tr> 
            }
        </table>       
    }
</div>

コントローラ:

[HttpPost]
public FileResult DownloadQrcode(int linkid)
{
    Qrcode Qrcode = DbO.getQrcodebyLinkId(linkid);
    string image = Server.MapPath("~") + "\\Qrcodes\\" + Qrcode.Image;
    string contentType = "image/jpg";

    return File(image, contentType, "Qrcode-" + Qrcode.QrcodeId);
}

リンク ID は、リストで選択されたリンクから取得されます。次に、データベース内のリンク ID と一致する qrcode を検索します。この qrcode オブジェクトから画像名を取得します。例 (qrcode-1337)。それから私は何をすべきかわからない。プロジェクトが保存されているパスを検索し、マップ Qrcodes (すべての画像が保存されている場所) と画像名を添付します。これにより、彼が見つけられないリンクが返されます。

地図の場所:

C:\Users\stage\Desktop\Immo-QR\Immo-QR\Immo-QR\Qrcodes

これはうまくいかないようです。FileResult の使用方法がわかりません。誰でもこれを説明できますか?または、別の方法を教えてください。

編集:

ユーザーは、マップ Qrcodes の下で行った App_Data ファイルに画像を配置することを提案しました。

ファイルを保存するには、次のコードを使用します。

文字列パス = Server.MapPath("~");

        System.IO.File.WriteAllBytes(path + "\\App_Data\\Qrcodes\\qrcode-" + qrcodeid + ".jpg", bytes);

上記の代わりに「~\App_Data\Qrcodes\qrcode-」を使用しても動作しません。

「/」アプリケーションでサーバー エラーが発生しました。リソースが見つかりません。

解決:

このコードで動作します!

public FileStreamResult DownloadQrcode(int linkid)
{
    Qrcode Qrcode = DbO.getQrcodebyLinkId(linkid);
    string path = Server.MapPath("~");
    Stream image = new FileStream(path + "\\App_Data\\Qrcodes\\" + Qrcode.Image + ".jpg", FileMode.Open);

    return File(image, "image/jpeg");
}
4

2 に答える 2

2

string image行を に変更してみてくださいStream image

これは、ファイルを読み取れないかどうかを理解するのに役立ちます。あなたのreturn Fileラインは問題なくストリームを受け取ります。

于 2013-08-16T14:20:15.500 に答える
0

あなたのアプローチは正しいです。

ファイルへのパスが間違っていると思います。

使う~\\Qrcodes\\filenameと に変換され<appRootDirectory>\\QrCodes\\filenameます。

また、IIS はほとんどの場合、通常のユーザーのようなホーム ディレクトリを持たない別のユーザーとして実行されることにも注意してください。

Qrcodes を AppData フォルダーまたは AppGlobalResources フォルダーに移動することをお勧めします。

それをしたくない場合は、Qrcodes フォルダーへの絶対パスを指定する必要があります。

于 2013-08-16T14:06:21.800 に答える