js拍照上傳
❶ 圖片拍照上傳解決方案
微信內置瀏覽器,和一些主流瀏覽器支持調用攝像頭,但也有很多不支持調用攝像頭,僅支持相冊。
如果是WebView中,就需要客戶端支持了,android和ios的許可權也是問題。
formData 簡介
簡單的說就是:通過formData,我們可以用ajax方式來發送表單數據;以前上傳圖片是需要用form表單提交的。
我們知道瀏覽器默認顯示的文件上傳按鈕是很醜的,通常UI都會對上傳按鈕進行設計。有以下幾種方案來寫樣式。
弊端:
坑
通過ref獲取上傳按鈕。
ref方式
event.target方式
坑:
FileReader 簡介
通過 readAsDataURL() ,在讀取操作完成後,result屬性中將包含一個data:URL格式的字元串以表示所讀取文件的內容。
base64字元串
兼容性
我在safari中測試,發現是支持的。
URL.createObjectURL 簡介
通過URL.createObjectURL()創建一個URL對象,這個URL對象表示指定的file對象或Blob對象。
兼容性
張鑫旭的文章: HTML5 file API加canvas實現圖片前端JS壓縮並上傳
張鑫旭的文章: 理解DOMString、Document、FormData、Blob、File、ArrayBuffer數據類型
使用Camera API
張鑫旭
❷ 如何使用html5實現拍照上傳應用
單純HTML5沒法做 需要後台技術 你可以看下關於.NET JSP php 最新的NODEJS
必定有很成熟的調用攝像頭拍照的介面或庫。
你可能需要系統學習的有
HTML5
CSS3
JAVASCRIPT JQUERY等
選擇一項你喜歡的後台語言。
❸ 微信小程序之圖片文件上傳
選擇圖片: https://developers.weixin.qq.com/miniprogram/dev/api/media/image/wx.chooseImage.html
上傳圖片: https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/wx.uploadFile.html
小程序身份認證界面,點擊上傳地方的加號,選擇相冊或者拍照,進行上傳,原圖無壓縮,最多上傳3張(分別為身份證正面、反面和手持) 。
註:這邊以laravel框架為例
1、定義文件上傳路由:
2、在laravel框架中的config文件夾下的filesystems.php文件中配置上傳路徑
3、身份認證文件上傳方法
1、在身份認證界面的wxml中綁定選擇圖片事件
2、在身份認證界面的js中定義上傳圖片的方法
3、上傳成功後,將上傳的文件地址存到數組中
❹ 使用js向伺服器上傳文件
(1)js無法向網站伺服器傳送文件只能用FTP傳送文件,(2)是動態網站要用js代碼函數與伺服器資料庫代碼建立連接函數。對應資料庫,數據,相應單位,通過指定路徑傳輸倒是制定數據單位。例如照片imag數據單位格式標注照片。通過編輯代碼任意網路客戶端都可上傳到資料庫imag格式單位標注中.相片.
❺ 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);
}
}
❻ 網頁調用攝像頭拍照改成上傳本地圖片
網頁調用攝像頭,很多瀏覽器不支持的。思路是:調用攝像頭拍照後,獲取到圖片的地址,或者文件二進制內容,非同步傳輸到伺服器。上傳也有兩種方法吧,一種是用H5的file類型input標簽,通過表單傳的。一種是通過js把文件轉成base64編碼格式傳輸的。
❼ 怎麼用html5或js調用手機的攝像頭拍照上傳以及調用
h5不能直接調用攝像頭,只能用<input type="file" />上傳圖片來間接調用攝像頭
❽ 怎麼用html5或js調用手機的攝像頭拍照上傳以及調用手機相冊選取照片
1、實現頭部的方法代碼。
注意事項:
JavaScript是一種屬於網路的腳本語言,已經被廣泛用於Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現自身的功能的。