javascript 编辑项目时,在Angular 8中设置文件输入值

cfh9epnr  于 2023-01-04  发布在  Java
关注(0)|答案(2)|浏览(103)

我有一个角8程序,我想编辑一个项目后,点击编辑和价值显示在各自的形式。所以为名称价值将显示在名称文本输入。年龄将显示在年龄文本输入等问题是,当我点击编辑,图像输入文件不显示或保存图像。现在我如何在单击编辑时默认显示该图像,类似于文本文件?我知道文本输入使用[(ngModel)] = "value"/>,但这似乎对输入文件不起作用。下面是我的图像输入文件和相应的ts文件的代码。
超文本标记语言

<div class="form-group">
 <input formControlName="ProductFile" #file type="file" name="photo" ng2FileSelect [uploader]="uploader" (change)="previewImage(file.files)" />
 <div [hidden]="!imgURL">
  <img [src]="imgURL || '//:0'" height="200" >
 </div>              
</div>

编辑文件.ts

previewImage(files, product) {
    if (files.length === 0)
      return;

    var mimeType = files[0].type;
    if (mimeType.match(/image\/*/) == null) {
      return alert('Only image files!');
    }

    var reader = new FileReader();
    this.imagePath = files;
    reader.readAsDataURL(files[0]); 
    reader.onload = (_event) => { 
      //upload percentage
      this.uploadPercent = new Observable((observer) => {
        Math.round((_event.loaded / _event.total) * 100);  
      });
      this.imgURL = reader.result; 
    }
  }
z8dt9xmd

z8dt9xmd1#

  • 需要澄清 *
  • 您的previewImage函数接收到两个参数,但您似乎只发送了一个。
  • 您想在用户选择文件之前显示默认图像吗?如果是这样,change() lifehook将不会有帮助。它只在选择新文件之后触发。
  • 可能的解决方案 *
  • 您可以在assets文件夹中保存一个默认文件,或者实际上在文件系统中的任何位置,并将其作为imageURL的默认值传递:

imageUrl = 'default-path/file.ext'

  • 如果您从服务器获取默认文件,请将其作为dto类的成员发送,数据类型为byte[],然后您可以将原始字节传入src:
// model.kt
data class FileDto(content: ByteArray, ext: string)
// controller
@GetMapping(value = ["/file/{fileId}"])
fun getFile(@PathVariable("fileId") fileId: string): FileDto {
    return fileService.fetchFile(UUID.fromString(fileId))
}
// file-service.kt                  
    // assuming filePath and ext are columns in your db table
    fun fetchFile(fileId: UUID): FileDto {   
        return try {                    
            db.findById(fileId).let {          
                FileDto(FileSystemResource(it.filePath).file.readBytes(), it.ext)
            }                           
        }                               
        catch (e: FileNotFoundException) { handleExceptions(e) }
        catch(e: IOException) { handleExceptions(e) }
    }

    private fun handleExceptions(e: Exception): Nothing {
        e.printStackTrace()
        throw e
    }

此端点将为您提供显示文件所需的一切:

  • 客户端 *

一个三个一个x一个四个一个x一个五个一个x一个六个一个

kmbjn2e3

kmbjn2e32#

现在,当我点击类似于文本文件的编辑按钮时,如何默认显示这个图像呢?[...]这似乎对输入文件不起作用。
我尝试在StackBlitz项目中重现您的问题(参见link)。
在不过多修改示例代码的情况下,下面是我如何从输入文件中获取要显示的图像:

  • 从模板中,在根div HTML元素中提供[formGroup]指令。
<div class="form-group" [formGroup]="form">
    ...
</div>
  • 在组件类中,定义提供的form窗体组,其中包含ProductFile窗体控件。
form = new FormGroup({
  ProductFile: new FormControl(''),
});

希望这个有用。

相关问题