webview 呼叫照相機,相簿上傳檔案
private static final int REQ_CHOOSE = REQ_CAMERA+1;
ValueCallback<Uri[]> mFilePathCallback;
private class MyWebChromeClient extends WebChromeClient {
public boolean onShowFileChooser(
WebView webView, ValueCallback<Uri[]> filePathCallback,
WebChromeClient.FileChooserParams fileChooserParams) {
if (mFilePathCallback != null) return true;
mFilePathCallback = filePathCallback;
selectImage();
return true;
}
// For Android 3.0+
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
if (mUploadMessage != null) return;
mUploadMessage = uploadMsg;
selectImage();
// Intent i = new Intent(Intent.ACTION_GET_CONTENT);
// i.addCategory(Intent.CATEGORY_OPENABLE);
// i.setType("*/*");
// startActivityForResult( Intent.createChooser( i, "File Chooser" ), FILECHOOSER_RESULTCODE );
}
// For Android < 3.0
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
openFileChooser( uploadMsg, "" );
}
// For Android > 4.1.1
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
openFileChooser(uploadMsg, acceptType);
}
}
/**
* 檢查SD卡是否存在
*
* @return
*/
public final boolean checkSDcard() {
boolean flag = Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
if (!flag) {
Toast.makeText(this, "請插入手機儲存卡再使用本功能",Toast.LENGTH_SHORT).show();
}
return flag;
}
String compressPath = "";
protected final void selectImage() {
if (!checkSDcard())
return;
String[] selectPicTypeStr = { "相機","相簿" };
AlertDialog alertDialog = new AlertDialog.Builder(this)
.setItems(selectPicTypeStr,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
switch (which) {
// 相機拍攝
case 0:
openCarcme();
break;
// 手機相簿
case 1:
chosePic();
break;
default:
break;
}
compressPath = Environment
.getExternalStorageDirectory()
.getPath()
+ "/fuiou_wmp/temp";
new File(compressPath).mkdirs();
compressPath = compressPath + File.separator
+ "compress.jpg";
}
}).setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialogInterface) {
if(mFilePathCallback != null){
Uri[] uris = new Uri[1];
uris[0] = Uri.parse("");
mFilePathCallback.onReceiveValue(uris);
mFilePathCallback=null;
}else {
mUploadMessage.onReceiveValue(Uri.parse(""));
mUploadMessage=null;
}
}
}).show();
}
String imagePaths;
Uri cameraUri;
/**
* 開啟照相機
*/
private void openCarcme() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imagePaths = Environment.getExternalStorageDirectory().getPath()
+ "/fuiou_wmp/temp/"
+ (System.currentTimeMillis() + ".jpg");
// 必須確保資料夾路徑存在,否則拍照後無法完成回撥
File vFile = new File(imagePaths);
if (!vFile.exists()) {
File vDirPath = vFile.getParentFile();
vDirPath.mkdirs();
} else {
if (vFile.exists()) {
vFile.delete();
}
}
cameraUri = Uri.fromFile(vFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraUri);
startActivityForResult(intent, REQ_CAMERA);
}
/**
* 拍照結束後
*/
private void afterOpenCamera() {
File f = new File(imagePaths);
addImageGallery(f);
}
/** 解決拍照後在相簿中找不到的問題 */
private void addImageGallery(File file) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
/**
* 本地相簿選擇圖片
*/
private void chosePic() {
//刪除檔案
// FileUtils.delFile(compressPath);
/* Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT); // "android.intent.action.GET_CONTENT"
String IMAGE_UNSPECIFIED = "image/*";
innerIntent.setType(IMAGE_UNSPECIFIED); // 檢視型別
Intent wrapperIntent = Intent.createChooser(innerIntent, null);
startActivityForResult(wrapperIntent, REQ_CHOOSE);*/
Intent intent = new Intent(MywebviewTestActivity.this,TukuActivity.class);
startActivityForResult(intent, REQ_CHOOSE);
}
/**
* 選擇照片後結束
*
* @param data
*/
private Uri[] afterChosePic(Intent data) {
// 獲取圖片的路徑:
// String[] proj = { MediaStore.Images.Media.DATA };
// 好像是android多媒體資料庫的封裝介面,具體的看Android文件
// Cursor cursor = managedQuery(data.getData(), proj, null, null, null);
/* if(cursor == null ){
Toast.makeText(this, "上傳的圖片僅支援png或jpg格式",Toast.LENGTH_SHORT).show();
return null;
}*/
// 按我個人理解 這個是獲得使用者選擇的圖片的索引值
// int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
// 將游標移至開頭 ,這個很重要,不小心很容易引起越界
// cursor.moveToFirst();
// 最後根據索引值獲取圖片路徑
//這個是 吧圖片路徑才分出來
String Mypath = data.getStringExtra("result");
String[] Path = Mypath.split("%26");
Uri[] iMUri=new Uri[Path.length];
for(int i =0;i<Path.length;i++){
File newFile = FileUtils.compressFile(Path[i],Environment
.getExternalStorageDirectory()
.getPath()
+ "/fuiou_wmp/temp" + File.separator+"compress"+i+".jpg");
iMUri[i]=Uri.fromFile(newFile);
}
// if(path != null && (path.endsWith(".png")||path.endsWith(".PNG")||path.endsWith(".jpg")||path.endsWith(".JPG"))){
// File newFile=new File(path);
//把它做成檔案組
return iMUri;
}
/**
* 返回檔案選擇
*/
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
if (requestCode == FILECHOOSER_RESULTCODE) {
if (null == mUploadMessage)
return;
Uri result = intent == null || resultCode != RESULT_OK ? null
: intent.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
}
if (null == mUploadMessage && mFilePathCallback == null)
return;
Uri uri = null;
File file=null;
Uri[] myUris=null;
if(cameraUri!=null){
file = new File(cameraUri.getPath());
if(!file.exists()){
cameraUri = Uri.parse("");
}
}
if(requestCode == REQ_CAMERA &&mFilePathCallback != null){
afterOpenCamera();
uri = cameraUri;
Uri[] uris = new Uri[1];
uris[0] = uri;
mFilePathCallback.onReceiveValue(uris);
}else if(requestCode == REQ_CHOOSE && mFilePathCallback != null){
myUris = afterChosePic(intent);
mFilePathCallback.onReceiveValue(myUris);
}
/*if(){
}else {
mUploadMessage.onReceiveValue(uri);
}*/
mFilePathCallback = null;
mUploadMessage = null;
super.onActivityResult(requestCode, resultCode, intent);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}else{
finish();
}
return super.onKeyDown(keyCode, event);
}
相關推薦
webview 呼叫照相機,相簿上傳檔案
private static final int REQ_CAMERA = FILECHOOSER_RESULTCODE+1; private static final int REQ_CHOOSE = REQ_CAMERA+1; ValueCallback<Uri[]> mFilePat
Tomcat配置虛擬路徑,使上傳檔案與伺服器及工程檔案分離開
原文連結:https://my.oschina.net/pingdy/blog/381001 摘要: 現在一般的專案都可能會涉及檔案的上傳與下載,那如何管理這些檔案呢?做法各有千秋!今天我也分享下我是怎麼去管理這些檔案的!當然了,這樣的方式只適用於檔案量小的情況下!如果檔案數量非
阿里雲 javascript上傳檔案(圖片、視訊、壓縮包等檔案)到 物件儲存 OSS ,返回上傳檔案、圖片、音訊、視訊等URL路徑
目的:前端上傳檔案(圖片、視訊、音訊等)到阿里雲伺服器裡面,並且獲得上傳檔案的URL路徑 前提:首先要買一個阿里雲伺服器,自己百度不會; 第一步:登入阿里雲賬號,點選管理控制檯-->物件儲存 OSS 第二步:新建儲存空間(圖一、圖二) (圖一) (圖二
IntelliJ IDEA實現遠端連線linux,並上傳檔案到linux伺服器(SSH會話功能和SFTP功能)
注意: eclipse的SSH會話功能和SFTP功能這裡不會說 點選以下連結可檢視 eclipse的SSH會話功能和SFTP功能 而IntelliJ IDEA(以下簡稱為IDEA)這麼強大的開發工具自然也有該功能,這篇部落格就介紹一下IDEA的SSH會話功能
ajax 上傳檔案,post上傳檔案,ajax 提交 JSON 格式的資料
ajax簡介 前後臺做資料互動 前後端做資料互動的方式(三種): (1)瀏覽器視窗輸入地址(get的方式)(2)form表單提交資料(3)ajax提交資料 特點 特點: (1)非同步 非同步與同步的區別:同步是請求發過去,要等著迴應;非同步不
通過okhttp3方式呼叫另一個專案上傳檔案
OkHttp3檔案上傳介面 專案中用到需要將檔案上傳到另一專案B上,專案B提供了一個檔案上傳的介面。就用到了在後臺介面中傳送post請求來將檔案傳過去。可以使用okhttp3的方式,非常簡單。 1、加依賴 首先專案加如下依賴: <dependency>
tp5呼叫阿里雲oss上傳檔案
推薦使用composer方式 composer方式安裝SDK的步驟如下: 在專案的根目錄執行composer require aliyuncs/oss-sdk-php,或者在composer.j
在SpringBoot的環境下,寫上傳檔案的功能,結果沒有獲取到檔案的問題(ServletFileUpload中getItemIterator(request)為空)
在SpringBoot的環境下,寫上傳檔案的功能,結果沒有獲取到檔案的問題: 情況一: 使用Apache Commons FileUpload 元件上傳檔案時總是返回null,multipart/form-data型別檔案的接收。 <!DOCTYPE html>
abap中,ftp上傳檔案demo
*&---------------------------------------------------------------------**& Form frm_trans_file_to_ftp*&----------------
Vue.js下載檔案及判斷上傳檔案型別,獲取上傳檔案大小
目錄 下載檔案 方法一 方法二 方法三 1.程式碼 1.程式碼 1.程式碼 下載檔案 所用的瀏覽器:Google Chrome 方法一 功能:點選匯出按鈕,提交請求,下載excel檔案; 1.跟後端
在雲伺服器(Windows系統)端建立ftp服務端,並上傳檔案
1.開始—》搜尋“mstsc”—>如下圖 之後有要求輸入使用者名稱和密碼,注意是使用者名稱預設是administrator,密碼是雲伺服器的密碼(包括大小寫和字元的那個密碼) 2.連
批處理中呼叫 WinSCP 命令列上傳檔案
@echo off setlocal enabledelayedexpansion set ID=AY47C010 REM 設定檔案的路徑 set SHELL_DIR=H:\IDE\eclipse\workspace\XXXX\shell set CLASSES_DIR=H
【全網首創】修改 Ext.ux.UploadDialog.Dialog 原始碼支援多選新增檔案,批量上傳檔案
公司老框架的一個頁面需要用到檔案上傳,本以為修改一個配置引數即可解決,百度一番發現都在說這個第三方外掛不支援檔案多選功能,還有各種各樣缺點,暫且不討論這些吧。先完成領導安排下來的任務。 任務一:支援多選新增檔案 任務二:支援批量新增檔案 我們先來說第二個任務吧,第二個任務相比較容易些,經過半天
android使用webview上傳檔案(支援相簿和拍照),支援最高6.0安卓系統(改進版)
首先學習 http://blog.csdn.net/woshinia/article/details/19030437 對input file的支援1.注意 mUploadMessage.onReceiveValue(Uri.parse("")); 必須得到呼叫,無論使用者是否選了圖,否則會出現再點選不響應
Android WebView嵌入H5之file頭像上傳檔案,適配所有版本
最近公司需要開發新的專案,為了節省時間成本,要求整體嵌入H5介面。對,沒看錯是整體嵌入,心中一萬隻草泥馬奔騰,沒辦法大佬就是大佬,還是的照做。 今天來說說h5上傳頭像的問題吧。網上有很多的解決方案,開始我覺得好像很簡單,都有成功案例,等把程式碼copy下來,發現並不能執
android使用webview上傳檔案(支援相簿和拍照)
最近需要做一個專案,需要呼叫伺服器段的一些網頁來選擇檔案,剛開始還挺糾結的,不知從何下手,網上大致預覽了大神們走過的路,他們傳統的方式都是使用一下程式碼: publicvoid openFileChooser(ValueCallback<Uri> uploa
關於微信WEBVIEW網頁無法上傳檔案的問題,即是INPUT FILE不支援的問題
絕大部分人都遇到了微信內建瀏覽器中input file元素點選沒反應的情況,這其實並不是微信的錯,微信沒有做任何事情來限制你。 這個問題只存在於Android4.4或以上版本的系統,4.4以下是沒問題的,IOS當然也是沒有任何問題。所以這是google的錯。從Andro
springMVC上傳檔案,MultipartHttpServletRequest、MultipartFile進行檔案上傳
這裡使用apache的開源jar包完成上傳功能,使用jar包分別是:common-fileupload.jar和common-io.jar 先編寫上傳檔案幫助類,如果需要區分檔案型別,可以將檔案字尾擷取進行判斷; springmvc-mvc.xml配置,這裡主要配置spri
Spring Boot上傳檔案出錯,Required request part fileis not present
先上程式碼: @RestController @RequestMapping("/file") //@PreAuthorize(“hasAuthority(ROLE_USER)”) public class FileController { /** * 提取檔案上傳的公用程式碼
ajax+php上傳檔案原始碼,可正常執行
完整的jquery Ajax+php上傳檔案原始碼,可直接放到網站目錄下執行 index.html <html> <head> <title>TEST</title> <meta charset="UTF-8"&g