- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试设置 src
的 <img>
在来自文件字符串路径的 html 上。
路径取自cordova.file.dataDirectory
Ionic2
上的 cordova 插件( Typescript
) 看起来像:
编辑以显示我的代码:
这是profile.ts代码的相关部分
...
import {Camera} from "ionic-native";
...
import {API} from "../../services/api";
import {ImageAdquistionService} from "../../services/imageAdquisition.service";
...
import {Network,File} from 'ionic-native';
declare let cordova: any;
@Component({
selector: 'page-profile',
templateUrl: 'profile.html'
})
export class ProfilePage implements OnInit{
connected:boolean = false;
imagePath: string = "./assets/img/pio.jpg";
userInfo: User = new User();
constructor(
private api:API,
private imageAdquistionService: ImageAdquistionService,
){
//seleted tab by default
this.tabs="info";
this.connected = Network.type !== "none";
}
ngOnInit(): void {
this.localStorageService.getUserInfo().then(user => {
this.userInfo = user;
if (this.userInfo.imagenPerfil !== "defAlert") {
File.checkFile(cordova.file.dataDirectory,this.userInfo.profileImage).then(result => {
console.log("exist")
this.imagePath = cordova.file.dataDirectory + this.userInfo.profileImage;
})
.catch(error => {
console.log("not exist " + JSON.stringify(error))
})
}
});
}
presentImageOptions(){
let actionSheet = this.actionSheetCtrl.create({
title: 'Select an option',
buttons: [
{
icon: 'camera',
text: 'photo',
handler: () => {
let navTransition = actionSheet.dismiss();
navTransition.then(() => {
this.imageAdquistionService.getANewImage(Camera.PictureSourceType.CAMERA).then(imageData => {
if(imageData.success){
this.uploadImage(imageData.fileName, imageData.filePath);
}
else{this.presentToast(imageData.message)}
})
});
return false;
}
}, {
icon: 'image',
text: 'Gallery',
handler: () => {
let navTransition = actionSheet.dismiss();
navTransition.then(() => {
this.imageAdquistionService.getANewImage(Camera.PictureSourceType.PHOTOLIBRARY).then(imageData => {
if(imageData.success){
this.uploadImage(imageData.fileName, imageData.filePath);
}
else{this.presentToast(imageData.message)}
});
});
return false;
}
}, {
text: 'Close',
role: 'cancel',
handler: () => {
console.log('Cancel clicked');
}
}
]
});
actionSheet.present();
}
uploadImage(fileName: string, filePath: string){
this.presentLoadingCustom();
this.localStorageService.getAccessToken().then(token => {
this.api.uploadFile(fileName,filePath).then(result =>{
this.loading.dismissAll();
console.log("uploaded OK);
this.userInfo.profileImage = fileName;
this.imagePath = filePath;
this.api.updateUserPreferences(this.userInfo,token).then(result =>{
if(result.success) {
console.log("updated ok");
this.presentToast("image updated succesfully");
}
});
})
.catch(error => {
this.presentToast(error.message)
})
})
}
}
这是imageAdquisitionService的相关代码
import { Injectable } from '@angular/core';
import {LocalStorageService} from "./localStorage.service";
import {Platform} from "ionic-angular";
import {Camera, File, FilePath} from "ionic-native";
import {API} from "./api";
declare let cordova: any;
@Injectable()
export class ImageAdquistionService {
constructor(private storage: LocalStorageService,
public platform: Platform,
private api:API) {
}
getANewImage(src):Promise<any>{
let options = {
quality: 60,
sourceType: src,
saveToPhotoAlbum: false,
correctOrientation: true
};
return Camera.getPicture(options).then((imageData) => {
// Special handling for Android library
if (this.platform.is('android') && src === Camera.PictureSourceType.PHOTOLIBRARY) {
return FilePath.resolveNativePath(imageData)
.then(filePath => {
let correctPath = filePath.substr(0, filePath.lastIndexOf('/') + 1);
let currentName = imageData.substring(imageData.lastIndexOf('/') + 1, imageData.lastIndexOf('?'));
return this.storage.getUserInfo().then(user => {
return this.copyFileToLocalDir(correctPath, currentName, this.createFileName(user._id)).then(copyResult => copyResult);
});
}, (error) => {
// Handle error
return {success: false, message: error.message};
}
);
} else {
let currentName = imageData.substr(imageData.lastIndexOf('/') + 1);
let correctPath = imageData.substr(0, imageData.lastIndexOf('/') + 1);
return this.storage.getUserInfo().then(user => {
return this.copyFileToLocalDir(correctPath, currentName, this.createFileName(user._id)).then(copyResult => copyResult);
});
}
}, (error) => {
// Handle error
return {success: false, message: error.message};
}
)
}
// Create a new name for the image
createFileName(id:string) {
let d = new Date(),
n = d.getTime(),
newFileName = n + ".jpg";
newFileName = id + "_" + newFileName;
return newFileName;
}
// Copy the image to a local folder
copyFileToLocalDir(namePath, currentName, newFileName):Promise<any> {
return File.copyFile(namePath, currentName, cordova.file.dataDirectory, newFileName).then(success => {
console.log("response of copy " + JSON.stringify(success));
return {success: true, fileName: newFileName, filePath: this.pathForImage(newFileName)};
}, error => {
this.api.logIonicView("Error while storing file " + error.message);
return {success: false, message: error.message};
});
}
// Always get the accurate path to the apps folder
public pathForImage(img) {
if (img === null) {
return '';
} else {
return cordova.file.dataDirectory + img;
}
}
}
这是api服务的相关代码
uploadFile(name:string, path:string):Promise<any>{
let options = {
fileKey: "file",
fileName: name,
chunkedMode: false,
mimeType: "multipart/form-data",
params : {'fileName': name}
};
let fileTransfer = new Transfer();
// Use the FileTransfer to upload the image
return fileTransfer.upload(path, this.urlBase + "upload", options)
.then(data => {
console.log("message on filetransfer "+ JSON.stringify(data.response));
data})
.catch(this.handleError);
}
这是html代码的相关代码
<ion-item no-lines class="item-bar-profile">
<ion-avatar>
<img class="centered" src="imagePath" (click)="presentOptions();">
</ion-avatar>
</ion-item>
这是一个默认图像路径硬类型化的示例:
this.imagepath = "./assets/img/pio.jpg"
这是一个以编程方式将路径更改为
的示例this.imagepath = file:///data/user/0/com.ionicframework.myionicproject494629/files/58db7e92be26f32d4c8c01d2_1491989021049.jpg
谢谢
最佳答案
我遇到了同样的问题。我意识到虽然我在 android 设备上运行,但我是在 ionic 中实时运行它,它不适用于 cordova 插件。因此,我没有执行ionic cordova run android -l -c
,而是运行命令ionic cordova run android
。
关于image - 从 dataDirectory 文件路径设置为 img 的 src,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43363480/
我正在尝试使用 jquery 获取图像 src,如下所示: HTML Javascript var imageSrc = $('.post_container img').attr('s
我遇到错误,无法完成构建。我搜索了 Stackoverflow 和 Github。我已经尝试了很多方法,但我无法修复。请帮忙。 (1) 在 [src/nullnull/debug, src/debug
我正在尝试使用图像制作一款类似 Match3 的游戏,但我无法进行比较。我正在为固定数量的 atm 执行此操作,只是为了让它正常工作,稍后应该在 foreach 循环中。如果有什么区别的话,该函数位于
我正在使用 jquery 插件 OwlCarousel,在我的一个 View 中使用 ng-repeat 场景,如下所示: 它运行良好,并为轮播中的每个项目输出以下标记: 有没
我的代码如下所示: Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.image1); int wi
如果未找到 src,我将使用 Angular 指令作为后备 url 作为名称首字母 指令 (function () { 'use strict'; angular .m
我是构建 chrome 扩展的新手,从一个小项目开始,我需要在弹出窗口中打印“构建版本”。构建版本被附加到 JS/CSS 资源中,如下所示: 需要从脚本 src 值中提取“6.0”。你能帮我看看如何
类型‘AbstractControl’上不存在属性‘Controls’。
这个tutorial演示如何使用指令 ngSrc 而不是 src : 他们要求: Replace the ng-src directive with a pl
我正在创建一个包含多个图像的图库,您可以在其中单击一个小缩略图,然后将打开该图像的更大版本。 打开后,如果您移动光标,图像将在 y 轴上跟随您。类似于 https://www.zara.com/es/
文档[] src.charAt src.length 这三样东西是什么? 我确定 pixState 会给我 1 或 0; var pixState = document[imgName].src.ch
问题背景: 我正在使用这个问题的解决方案:How to update AngularJS view when the value has not changed?所以在我看来我有: 当我更改照片时
我在 html 中有整个页面,在输出之前我想将所有 img src 替换为 data-src我正在使用 return (preg_replace('~]*\K(?=src)~i','data-',
Difference(s): android:src and tools:src? 如果有的话,什么时候使用 tools:src 而不是 android:src 是合适的? 最佳答案 如果您在运行时在
我需要检查每个 script 标签的 src 值,如果匹配,我想更改该脚本标签的 src 属性...像这样: var scripts = document.getElementsByTagName("
使用 img 标签的 data-src 或 src 属性有什么区别和后果(好的和坏的)?我可以使用两者获得相同的结果吗?如果是这样,应该什么时候使用它们? 最佳答案 属性 src 和 data-src
我使用 Vue。我尝试输出图像,当我使用 src 时效果很好,但当我使用 :src 时效果不佳。 作品 不起作用 我试过但没有用 @ 在路径的第一个。 ~ 路径中的第一个。 ./ 在路径的第一个。
在当前项目中我正在使用 jQuery。我只是想知道为什么会这样, $('#homeIcon').hover(function(){ document.getElementById('homeI
我在严格的 Java 环境中。 所以这个问题并不像标题中那么简单,我不是要解决我遇到的问题,它更理论化,以获得更好的知识。 我感兴趣的是用双引号或单引号匹配 src,但如果是双引号,它也必须用双引号结
我有一个 Joomla 2.5.28,现在使用 https 而不是 http。 一些文章(很多)包含来自 Vimeo 的嵌入视频。 最初,这些视频是使用http嵌入的,所以现在我的数据库中有字段int
我是一名优秀的程序员,十分优秀!