Загрузка основного файла Asp.net - PullRequest
0 голосов
/ 02 октября 2018

когда я сохраняю изображение, изображение успешно сохраняется в базе данных, но для него требуется полный путь к изображению, например, C: \ Users .... \ Uploads \ employee.jpg Я не хочу этого, мне нужно сохранять путь к изображению, например,это ~ Uploads \ employee.jpg и в определенной папке и тот же путь должны быть сохранены в базе данных, также, если кто-то покажет мне после сохранения правильный путь, как я могу просмотреть это изображение.из-за этого возникает ошибка:

"Не разрешено загружать локальный ресурс: file: /// C: / ......"

спасибо!

мой код:

[HttpPost]
public async Task<IActionResult> Create(Photos photos)
    {
        if (ModelState.IsValid)
        {
            var filePath = 
            Path.Combine(_appEnvironment.ContentRootPath,
            "Uploads", photos.FormFile.FileName);
            photos.PhotoPath = filePath;

            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await photos.FormFile.CopyToAsync(stream);
            }

            _context.Add(photos);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        ViewData["NewsId"] = new SelectList(_context.News, "NewsId", 
        "NewsBigTitle", photos.NewsId);
        return View(photos);
    }

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Убедитесь, что вы настроили IFileProvider, указывая на папку Uploads в методе Configure класса Startup:

app.UseStaticFiles(); // Default one

// Adding one more location - folder named `Uploads` to be a custom static files folder. 
// The `Uploads` folder is available in the content root directory of the application (where your `Controllers` folder. 
// You can point it of course inside `wwwroot` - use `env.WebRootPath` instead)

app.UseStaticFiles(new StaticFileOptions {
    FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Uploads")),
    RequestPath = new PathString("/Uploads")
});

После того, как вы это сделаете, вы сможете загрузить файлтаким образом, в вашем действии контроллера:

var filePath = Path.Combine(_environment.ContentRootPath, "Uploads", photos.FormFile.FileName);

using (var stream = new FileStream(filePath, FileMode.Create))
{
    await photos.FormFile.CopyToAsync(stream);
}
0 голосов
/ 02 октября 2018

Разбить код:

var localPath = Path.Combine("Upload", "file.jpg");

var fullPath = Path.Combine(_appEnvironment.ContentRootPath, localPath);

Сохранить localPath в PhotoPath

Отредактируйте

Хорошо, теперь вызовите ваш PhotoPath в представлении и настройте его для действия с потоком файлов.

[HttpGet("path/{image}")]
public FileStreamResult Image(string image)
{
    var result = new FileStreamResult(new FileStream(
                  Path.Combine(_appEnvironment.ContentRootPath, image),
                  FileMode.Open,
                  FileAccess.Read), "image/<your_mime>");
    return result;
}

Лучший способ, как мне кажется, это создатьНовая строка в следующем формате http://example.com/path/image.jpg и привязка к src.

Вы не можете настроить таргетинг на динамически добавленные файлы, используя следующее: ~/path/image.jpg для вашего источника.

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