mui上傳圖片
B. input flie 拍照不能上傳
<template>
<h5 class="content-header">圖片列表</h5>
<div class="image-list">
<div class="list-default-img" v-show="isPhoto" @click.stop="addPic">
<img src="./images/icon_photo.png" />
<span>請選擇或者拍照上傳照片</span>
<input type="file" accept="image/jpeg,image/jpg,image/png" capture="camera" @change="onFileChange" style="display: none;">
</div>
<ul class="list-ul" v-show="!isPhoto">
<li class="list-li" v-for="(iu, index) in imgUrls">
<a class="list-link" @click='previewImage(iu)'>
<img :src="iu">
</a>
<span class="list-img-close" @click='delImage(index)'></span>
</li>
<li class="list-li-add">
<span class="add-img" @click.stop="addPic"></span>
</li>
</ul>
</div>
<div class="add-preview" v-show="isPreview" @click="closePreview">
<img :src="previewImg">
</div>
</template>
<script>
export default {
data: function () {
return {
imgUrls: [],
urlArr: [],
isPhoto: true,
btnTitle: '',
isModify: false,
previewImg:'',
isPreview: false
}
},
watch: {
imgUrls: 'toggleAddPic'
},
methods: {
toggleAddPic: function() {
let vm = this;
if(vm.imgUrls.length >= 1) {
vm.isPhoto = false;
} else {
vm.isPhoto = true;
}
},
addPic: function(e) {
let vm = this;
$('input[type=file]').trigger('click');
return false;
},
onFileChange: function(e) {
var files = e.target.files || e.dataTransfer.files;
if(!files.length) return;
this.createImage(files, e);
},
createImage: function(file, e) {
let vm = this;
lrz(file[0], { width: 480 }).then(function(rst) {
vm.imgUrls.push(rst.base64);
return rst;
}).always(function() {
// 清空文件上傳控制項的值
e.target.value = null;
});
},
delImage: function(index) {
let vm = this;
let btnArray = ['取消', '確定'];
mui.confirm('確定刪除該圖片?','提示', btnArray, function(e) {
if (e.index == 1) {
vm.imgUrls.splice(index, 1);
}
})
},
previewImage: function(url){
let vm = this;
vm.isPreview = true;
vm.previewImg = url;
},
closePreview: function(){
let vm = this;
vm.isPreview = false;
vm.previewImg = "";
},
saveImage: function(){
let vm = this;
let urlArr = [],
imgUrls = this.imgUrls;
for(let i = 0; i < imgUrls.length; i++) {
if(imgUrls[i].indexOf('file') == -1) {
urlArr.push(imgUrls[i].split(',')[1]);
} else {
urlArr.push(imgUrls[i]);
}
}
//數據傳輸操作
}
}
}
</script>
1.點擊拍照或選擇圖片addPic
在vue.js中出發拍照和選擇圖片是頻繁操作行為,每次只能拍照或選擇一張圖片,可以拍多張上傳,使用給click事件加上.stop的修飾符,.stop- 調用event.stopPropagation(),是為了停止冒泡。accept是為了規定通過文件上傳來提交的文件的類型,capture是webApp中捕獲到系統默認的設備,camera--照相機;camcorder--攝像機;microphone--錄音。
4. 大圖預覽已經被壓縮的圖片及關閉大圖預覽 isPreview previewImageclosePreview
在這里大圖預覽就是將base64格式的圖片直接放進預覽DOM的img src中放大展示,點擊圖片自身關閉預覽,清空img src資源。
5. 對base64圖片傳輸前的處理 saveImage
saveImage: function(){
let vm = this;
let urlArr = [],
imgUrls = this.imgUrls;
for(let i = 0; i < imgUrls.length; i++) {
if(imgUrls[i].indexOf('file') == -1) {
urlArr.push(imgUrls[i].split(',')[1]);
} else {
urlArr.push(imgUrls[i]);
}
}
//數據傳輸操作
}
我壓縮成base64字元串是「data:image/jpeg;base64,~~」的字元串,為了後端好處理,我這里為了將編輯時候後台返回的圖片url區別開來,將「data:image/jpeg;base64,"截取掉,只傳遞給後端逗號後面的base64字元串。
注意:後端接收到我傳遞的base64字元串數組的時候,發現字元經如果被urlencode後標準的base64中的/、 +會被轉成%xx,後端在將base64字元串處理成圖片時,需要將特殊字元過濾掉。
[HttpPost]
public ActionResult MUploadImgBase64Str(string base64str)
{
try
{
var imgData = base64str;
//過濾特殊字元即可
string mmyData = imgData.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+");
if (mmyData.Length % 4 > 0)
{
mmyData = mmyData.PadRight(mmyData.Length + 4 - mmyData.Length % 4, '=');
}
byte[] byteArray = Convert.FromBase64String(mmyData);
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(byteArray))
{
var img = System.Drawing.Image.FromStream(ms);
var path = "~/Content/UploadFiles/mobile/";
var uploadpath = Server.MapPath(path);
if (!Directory.Exists(uploadpath))
{
Directory.CreateDirectory(uploadpath);
}
var saveName = uploadpath + 「stoneniqiu」 + ".jpg";
img.Save(saveName);
return Json(saveName);
}
}
catch (Exception e)
{
return Json(e.Message);
}
}
C. mui框架 有上傳圖片組件么
mui框架好像沒有自帶的上傳圖片的組件吧!
D. mui頁面之間怎麼實現傳值,例如a頁面的id怎麼帶到b頁面上
如果都是html頁面的話,就實現不了。因為兩個頁面要相互傳值。只有動態頁面才能處理請求。不好意思,我剛查了一下,僅用js也可以實現,它是分隔字元串實現的,代碼如下:此處使用JS方式實現靜態頁之間值傳遞,其實很簡單,廢話不多說,見代碼
E. mui 主頁面怎麼向子頁面傳值
在App開發中,頁面間傳值是很常見的開發需求,mui框架根據業務場景不同,提供了兩種傳值模式。
1、頁面初始化時,通過擴展參數傳值;
mui在初始化頁面時,提供了extras配置參數,通過該參數可以設置頁面參數,從而實現頁面間傳值;
mui框架在如下幾種場景下,會執行頁面初始化操作:
- 通過mui.openWindow()打開新頁面(若目標頁面為已預載入成功的頁面,則在openWindow方法中傳遞的extras參數無效);
- 通過mui.init()方法創建子頁面;
- 通過mui.init()方法預載入頁面;
- 通過mui.preload()方法預載入頁面
示例,假設我們有如下需求:
在首頁中打開關於頁面時,傳遞當前產品名稱及版本號,然後在關於頁面中讀取這兩個參數並顯示出來;
首頁實現代碼:
mui.openWindow({
url:'info.html',
id:'info.html',
extras:{
name:'mui',
version:'0.5.8'
}
});
\n
關於頁面實現代碼:
var self = plus.webview.currentWebview();
var name = self.name;
var version = self.version;
\n
2、頁面已創建,通過自定義事件傳值
F. mui img引入圖片手機端卻不清晰什麼原因
更換清晰度更高的jpg格式圖片
G. H5+和mui開發的app,拍照完成後如何將拍到的照片在頁面中形成預覽圖
【幾種打開頁面的方式】
1.初始化時創建子頁面
2.直接打開新頁面
3.預載入頁面
【示例】
1.初始化時創建子頁面
[js] view plain
mui.init({
subpages: [{
url: your - subpage - url, //子頁面HTML地址,支持本地地址和網路地址
id: your - subpage - id, //子頁面標志
styles: {
top: subpage - top - position, //子頁面頂部位置
bottom: subpage - bottom - position, //子頁面底部位置
width: subpage - width, //子頁面寬度,默認為100%
height: subpage - height, //子頁面高度,默認為100%
......
},
extras: {} //額外擴展參數
}]
});
2.直接打開新頁面
[js] view plain
mui.openWindow({
url: new - page - url,
id: new - page - id,
styles: {
top: newpage - top - position, //新頁面頂部位置
bottom: newage - bottom - position, //新頁面底部位置
width: newpage - width, //新頁面寬度,默認為100%
height: newpage - height, //新頁面高度,默認為100%
......
},
extras: {
..... //自定義擴展參數,可以用來處理頁面間傳值
}
show: {
autoShow: true, //頁面loaded事件發生後自動顯示,默認為true
aniShow: animationType, //頁面顯示動畫,默認為」slide-in-right「;
ration: animationTime //頁面動畫持續時間,Android平台默認100毫秒,iOS平台默認200毫秒;
},
waiting: {
autoShow: true, //自動顯示等待框,默認為true
title: '正在載入...', //等待對話框上顯示的提示內容
options: {
width: waiting - dialog - widht, //等待框背景區域寬度,默認根據內容自動計算合適寬度
height: waiting - dialog - height, //等待框背景區域高度,默認根據內容自動計算合適高度
......
}
}
})
3.預載入頁面
[js] view plain
// 方式1
mui.init({
preloadPages: [{
url: prelaod - page - url,
id: preload - page - id,
styles: {}, //窗口參數
extras: {}, //自定義擴展參數
subpages: [{}, {}] //預載入頁面的子頁面
}]
});
// 方式2
var page = mui.preload({
url: new - page - url,
id: new - page - id, //默認使用當前頁面的url作為id
styles: {}, //窗口參數
extras: {} //自定義擴展參數
});
【一些區別】
1.子頁面和非子頁面
以上三種方式中,2,3打開的頁面非子頁面,
區別是子頁面相當於html中的iframe,而非子頁面相當於新開了一個瀏覽器窗口載入了一個html
2.子頁面適用於側滑菜單
子頁面有其有點,特別適用與index.html+list.html這種情況,
如果用index.html(主頁面)+list.html(子頁面)實現的話,當主頁面右滑時子頁面會自動跟隨,
而用index.html(主頁面)+list.html(新頁面)實現的話,主頁面右滑,新頁面不右滑,還得單獨處理新頁面。
3.子頁面實用頻繁切換的情況
如果頻繁左滑右滑,在配置較低的手機上會出現list.html遮住index.html的情況,
採用子頁面模式就不會,採用新頁面模式幾率很大。
4.子頁面適用與下拉刷新和上拉載入
之前做大下拉刷新的時候,採用的是新頁面的形式,
按照官網教程,怎麼搞都不成功,
後來看了下源碼,發現下拉刷新必須採用子頁面的形式,
也就是你的list.html必須是index.html的子頁面,才可以下拉刷新。
5.新頁面適用於新頁面
open一個新頁面,適用於查看詳情之類的,需要打開一個新頁面的情況,
並且mui自己封裝了新頁面的back方法,你就不需要去操心了。
6.預載入頁面的兩種方式
第一種是在初始化的時候預載入,
這種情況適合在你這個頁面在很久之後才會用,
如果你要立即到的頁面並使用,那麼你會得到null。
H. MUI如何實現識別身份證調用相機帶邊框
在IOS端點擊時會提示選擇圖片或相機,安卓端要看瀏覽器對這兩個屬性的優化,部分瀏覽器會直接跳轉到資源管理器,優化做得好的可以直接提示選擇相冊或相機。這兩
I. thinkphp怎麼接收mui上傳圖片
你是使用MUI框架做混合開發嗎?,其實就是和網頁的上傳是一樣的。設置好文件接受的name就可以使用PHP的$_FILE處理了。