Как я могу отобразить TempData в теге img - PullRequest
0 голосов
/ 21 апреля 2020

У меня проблема с моим Asp. Net Базовым проектом. Я пытаюсь опубликовать файл изображения по локальному пути, это работает хорошо, но я хочу использовать тег img и показать этот файл пользователю. Я держу здесь путь к файлу;

    private IHostingEnvironment _env;
    public string _dir;
    public HomeController(IHostingEnvironment env)
    {
        _env = env;
        _dir = _env.ContentRootPath;
    }
    public async Task<IActionResult> FileUpload(IEnumerable<IFormFile> files)
    {
        foreach (var file in files)
        {
            Guid id = Guid.NewGuid();
            using (var fileStream = new FileStream(Path.Combine(_dir, $"{id}.png"), FileMode.Create, FileAccess.Write))
            {
                file.CopyTo(fileStream);
            }
            var name = $"{id}.png";
            var filePath = $"{_dir}" + "\\";
            string name2 = name.ToString();
            string filepath = filePath .ToString();
            string file = filepath + name2;
            TempData["link"] = file;
       }
       return new RedirectResult(@"Privacy"); //it can change for example it's Priavcy for now.
   }

И это мой тег .cs html img;

    <label>Link:</label><br />
    <img src="@TempData["link"]" alt="Incoming Image" id="link" /><br />
    <textarea cols="102" rows="5" disabled="disabled" style="resize:none;">@TempData["link"]</textarea>

, и я уже использую конвертацию base64, это не так здесь тоже не работает;

    <img src="@String.Format("data:image/png;base64,{0}", Convert.ToBase64String(TempData["link"]));" alt="Incoming Image" id="link" />

спасибо за просмотр моего поста, в отношении сообщества ...

1 Ответ

0 голосов
/ 22 апреля 2020

ContentRootPath - это локальный путь к root вашего приложения. Локальный путь работает только в контексте локальной машины, то есть в этом случае сервера, на котором запущено приложение. Таким образом, вы можете использовать этот путь, чтобы указать, где сервер должен хранить путь, но для пользователя этот путь не имеет никакого смысла, поскольку он не может получить доступ к вашей локальной файловой системе.

Кроме этого, * Путь 1004 * content root - это также путь к сборкам вашего приложения, а также к файлам конфигурации вашего приложения. Как правило, вы не хотите, чтобы эта папка была доступна извне.

Вместо этого вы можете использовать WebRootPath, который является путем к папке wwwroot. По умолчанию эта папка обслуживается через промежуточное ПО stati c files. Таким образом, содержимое доступно для конечных пользователей. Вам просто нужно создать правильный путь:

private readonly string _webRootPath;

public HomeController(IHostingEnvironment env)
{
    _webRootPath = env.WebRootPath;
}

[HttpPost]
public async Task<IActionResult> FileUpload(IEnumerable<IFormFile> files)
{
    var targetFolder = Path.Combine(_webRootPath, "uploads");
    foreach (var file in files)
    {
        var fileName = $"{Guid.NewGuid()}.png";
        using (var fileStream = new FileStream(Path.Combine(targetFolder, fileName), FileMode.Create, FileAccess.Write))
        {
            file.CopyTo(fileStream);
        }

        // file is stored at `…/wwwroot/uploads/{fileName}`
        // so public path is `/uploads/{fileName}`
        var publicPath = "/uploads/" + fileName;

        TempData["link"] = publicPath;
    }
    return new RedirectResult(@"Privacy");
}

Путь ссылки - это ссылка на файл в папке wwwroot, доступный извне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...