У меня есть приложение, которое делает фотографию, и эта фотография отправляется в мой API. В моем API я хочу сохранить изображение, которое было отправлено в папку.
APP (Kotlin): код, относящийся к захваченному изображению
private fun openCamera() {
initData()
val values = ContentValues()
values.put(MediaStore.Images.Media.TITLE, "New Picture")
values.put(MediaStore.Images.Media.DESCRIPTION, "From the camera")
image_uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
//camera intent
val cameraI = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
cameraI.putExtra(MediaStore.EXTRA_OUTPUT, image_uri)
startActivityForResult(cameraI, Image_capture_code)
//stop bussula
}
@SuppressLint("MissingSuperCall")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
//called when image was captured from camea itent
if (resultCode == Activity.RESULT_OK) {
//set image captured to image view
image_view.setImageURI(image_uri)
//stop bussula
}
}
Вот класс, который имеет все атрибуты, которые отправляются в API. Изображение теперь считается строкой. То же самое происходит в модели API
data class Ocorrencias
(
@SerializedName("Dispositivo")
var Dispositivo : String,
@SerializedName("DataOcorrencia")
var DataOcorrencia : String,
@SerializedName("Latitude")
var Latitude : String,
@SerializedName("Longitude")
var Longitude : String,
@SerializedName("Azimute")
var Azimute : String,
@SerializedName("Fotografia")
var Fotografia : String,
@SerializedName("Estado")
var Estado : String
)
API: контроллер, который получает изображение и добавляет данные в базу данных (POST):
[HttpPost]
public async Task<IActionResult> PostOcorrencias([FromBody] Ocorrencias ocorrencia, IFormFile UploadImag)
{
ocorrencia.DataOcorrencia = DateTime.Now;
if (ocorrencia.Dispositivo == null)
{
return BadRequest(ModelState);
}
else
{
if (ocorrencia.Latitude == null)
{
return BadRequest(ModelState);
}
else
{
if (ocorrencia.Longitude == null)
{
return BadRequest(ModelState);
}
else
{
if (ocorrencia.Azimute == null)
{
return BadRequest(ModelState);
}
else
{
//processar a fotografia
//ocorrencia.Fotografia = "(nome fotografia)";
if (UploadImag == null) {
return BadRequest(ModelState);
}
else {
if (UploadImag.ContentType == "image/jpeg" ||
UploadImag.ContentType == "image/png") {
string caminho = "";
string extensao = Path.GetExtension(UploadImag.FileName).ToLower();
Guid g;
g = Guid.NewGuid();
string nome = DateTime.Now.ToString("yyyyMMdd_HHmmss_") + g.ToString() + extensao;
caminho = Path.Combine(environment.WebRootPath, "imagensFogos", nome);
ocorrencia.Fotografia = nome;
// Cria o ficheiro no sistema
using (var stream = new FileStream(caminho, FileMode.Create)) {
await UploadImag.CopyToAsync(stream);
}
}
else {
// o que vai ser feito se a imagem não for png ou jpeg?
}
}
}
}
}
}
// a 'ocorrencia' é boa...
_context.Ocorrencias.Add(ocorrencia);
await _context.SaveChangesAsync();
/// depois, teremos de determinar se ha, ou nao, ignicao
/// neste momento, vamos assumir q ha sempre, e q a ocorrencia e uma ignicao
/// portanto:
/// - escrever na bd a ignicao
/// - invocar o SignalR pra atualizar os browsers
//todos os browsers abertos são sincronizados - SignalR
await hubContext.Clients.All.SendAsync("RedesignMap");
return CreatedAtAction("GetOcorrencias", new { id = ocorrencia.Id }, ocorrencia);
}
Я хочу сохранить изображение, полученное в папку с именем imagensFogos, которая находится в проекте. Есть ли уроки, как это сделать, чтобы иметь общее представление?