上傳頭像 並裁剪
Main
public class MainActivity extends BaseActivity<MainPresenter> implements MainContract.View { @BindView(R.id.btn) Button btn; @BindView(R.id.tv) TextView tv; @BindView(R.id.btn02) Button btn02; private TimePickerView pickerView; private PopupWindow popupWindow; private TextView camera; private TextView pick; private TextView cancel; /********************************************************************************** private String path = Environment.getExternalStorageDirectory() + "/photo.png"; @Override public void setupActivityComponent(@NonNull AppComponent appComponent) { DaggerMainComponent //如找不到該類,請編譯一下專案 .builder() .appComponent(appComponent) .mainModule(new MainModule(this)) .build() .inject(this); } @Override public int initView(@Nullable Bundle savedInstanceState) { return R.layout.activity_main; //如果你不需要框架幫你設定 setContentView(id) 需要自行設定,請返回 0 } @Override public void initData(@Nullable Bundle savedInstanceState) { //動態新增許可權 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(new String[]{Manifest.permission.CAMERA}, 0); } pickerView = new TimePickerBuilder(this, new OnTimeSelectListener() { @Override public void onTimeSelect(Date date, View v) { tv.setText(getTime(date)); } }).build(); View inflate = View.inflate(this, R.layout.layout_pop, null); popupWindow = new PopupWindow(inflate, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); popupWindow.setOutsideTouchable(true); camera = inflate.findViewById(R.id.tv_camera_popup); pick = inflate.findViewById(R.id.tv_pick_popup); cancel = inflate.findViewById(R.id.tv_cancel_popup); //相機 camera.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //開啟相機 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //將圖片放到SD card intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path))); startActivityForResult(intent, 888); popupWindow.dismiss(); } }); //相簿 pick.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //開啟相簿 Intent intent = new Intent(Intent.ACTION_PICK); //設定圖片格式 intent.setType("image/*"); startActivityForResult(intent, 999); popupWindow.dismiss(); } }); //取消 cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { popupWindow.dismiss(); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 999 && resultCode == MainActivity.RESULT_OK) { Uri uri = data.getData(); crop(uri);//這個方法在下面 } else if (requestCode == 888 && resultCode == MainActivity.RESULT_OK) { Uri uri = Uri.fromFile(new File(path)); crop(uri); } else if (requestCode == 1000 && resultCode == MainActivity.RESULT_OK) { //傳到自己的控制元件上 //Bitmap bitmap = data.getParcelableExtra("data"); //imageView.setImageBitmap(bitmap); //上傳到網路 Uri uri = Uri.fromFile(new File(path)); // ChangeFileFormat 是一個類 看另一篇部落格 自己去複製吧 聯絡我也可以 我給你發文件 File file1 = ChangeFileFormat.getFileByUri(uri, this); //RequestBody封裝了檔案和檔案的型別 RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file1); // MultipartBody.Part封裝了接受的key和檔名字和RequestBody MultipartBody.Part part = MultipartBody.Part.createFormData("file",file1.getName(), requestBody); //調P層 mPresenter.getData(part); } } private void crop(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", true); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 300); intent.putExtra("outputY", 300); intent.putExtra("return-data", true); startActivityForResult(intent, 1000); } @OnClick({R.id.btn, R.id.btn02}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.btn02: popupWindow.showAtLocation(btn, Gravity.BOTTOM, 0, 0); break; } } @Override public void responseMsg(bean bean) { String msg = bean.getMsg(); Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); } }
@Multipart
@POST("file/upload")
Observable<bean> uploadPhoto(@Query("uid") String uid, @Part MultipartBody.Part part)
P層
public void getData(MultipartBody.Part part){ Observable<bean> observable = mModel.requestData(part); observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<bean>() { @Override public void accept(bean bean) throws Exception { mRootView.responseMsg(bean); } }); }
m層
InfoService infoService = mRepositoryManager.obtainRetrofitService(InfoService.class);
Observable<bean> beanObservable = infoService.uploadPhoto("20473", data);
return beanObservable;
相關推薦
上傳頭像 並裁剪
Main public class MainActivity extends BaseActivity<MainPresenter> implements MainContract.View { @BindView(R.id.btn)
移動端 上傳頭像 並裁剪功能(h5)
charset 移動端 error max cli alert initial port round <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta
django 上傳頭像並預覽 3選1
email middle cit for bin utf files ajax 圖片地址 註冊頁面的頭像上傳 register.html<!DOCTYPE html> 1 <html lang="en"> 2 <head> 3
PC端上傳頭像及裁剪功能
基於vue框架 藉助elementUI框架做為上傳元件 藉助vue-cropper做為裁剪工具 話不多說,先看效果: 上傳頭像元件: <div class="app-head"> <h3>小程式頭像<
Retrofit上傳頭像並給該請求body新增引數---500 Internal Server Error
網路框架用的是retrofit,在引數配置方面,的確是行雲流水,屢試不爽······前提你很熟悉啊。 上傳頭像給後臺: 正常情況下(POST請求) //接口裡正常定義 @Multipart @POST("user/uploadAvatar") Observable
cropper.js 移動端上傳圖片 並 裁剪 的功能實現
定好頁面 效果如圖 要求 點選 + 號之後 上傳圖片 裁剪之後 放在頁面上 實現 依賴 remodal 和 cropper.js 把裁剪的內容 放在remodal裡 點選 +
django 使用者註冊時使用modelform上傳頭像並顯示在頁面
在寫使用者註冊時,除了新增使用者名稱,密碼,暱稱,郵箱等,再新增使用modelform上傳頭像的功能,並且在登入(django已經為我們寫好了登入功能的全部程式碼)之後頭像顯示在頁面1.伺服器端安裝pillowpip install pillow2.新增圖片欄位到使用者mod
apicloud 上傳頭像或圖片並預覽
點選頭像自動上傳 <div class="head" tapmode onclick="showAction()"><img id="img_src" src="../image/preview.jpg"/></div> // 點選
HTML5 本地裁剪圖片並上傳至伺服器 canvas圖片上傳 canvas圖片裁剪
很多情況下使用者上傳的圖片都需要經過裁剪,比如頭像啊什麼的。但以前實現這類需求都很複雜,往往需要先把圖片上傳到伺服器,然後返回給使用者,讓使用者確定裁剪座標,傳送給伺服器,伺服器裁剪完再返回給使用者,來回需要 5 步。步驟繁瑣不說,當很多使用者上傳圖片的時候也很影響伺服器
呼叫系統相機、相簿、剪裁圖片並上傳(常用於上傳頭像,相容Android7.0)
轉載請註明出處文章地址 本文轉自Hansion的部落格 由於在Android 7.0 採用了StrictMode API政策禁,其中有一條限制就是對目錄訪問的限制。 這項變更意味著我們無法通過File API訪問手機儲存上的資料,也就是說,給其他應用傳
利用js實現無重新整理上傳頭像(或檔案)並顯示進度條
無重新整理上傳原理:現在我們利用新技術FormData表單資料物件可以實現快速收集表單資訊,普通表單域 和 上傳檔案域 均可以收集,再結合ajax就可以實現無重新整理上傳。 那麼怎樣顯示進度條呢?原來ajax物件有upload成員,該成員也是物件,構造器是XMLHttpR
python基礎----socketserver多並發實現、FTP上傳多並發
span end 沒有 res hasattr ret net packet except 一、socketserver多並發 基於tcp的套接字,關
基於VUE選擇上傳圖片並在頁面顯示(圖片可刪除)
.ajax sta http data .cn 數據 file prim 生成 demo例子: 依賴文件 : http://files.cnblogs.com/files/zhengweijie/jquery.form.rar HTML文本內容:
WebForm實現文件上傳,並預覽
image form ict itl lec nbsp style object 是否 實現效果: 頁面代碼: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inh
PHP.25-TP框架商城應用實例-後臺1-添加商品功能、鉤子函數、在線編輯器、過濾XSS、上傳圖片並生成縮略圖
引用傳遞 none move 名稱 textarea 如果 library time fields 添加商品功能 1、創建商品控制器【C】 /www.test.com/shop/Admin/Controller/GoodsController.class.php
Android Studio第四十期 - 上傳頭像功能支持權限管理
android 服務器 代碼已經整理好,加了權限管理和SP保存上傳服務器的方法,希望能夠幫到大家~效果如下圖: 地址:https://github.com/geeklx/MyApplication/tree/master/p025_upload_img 附:這裏借鑒了翔神(
flask 上傳頭像
file turn col log {} str 文件 and quest 上傳頭像,自己感覺了好久,就是上傳文件唄其實,存在一個路徑,數據庫存儲這個路徑,然後展示給前端,啥都不說,看怎麽實現的。 數據庫設置如下 user_image=db.Column(d
上傳應用並生成下載鏈接需要多少錢;安卓市場上傳應用需要什麽
app上傳專業上架蘋果app app上架多少錢聯系QQ:2205357007 上傳應用並生成下載鏈接需要多少錢;安卓市場上傳應用需要什麽上傳應用程序到安卓分發市場時,經常需要填寫一些有關apk安裝包的信息。而作為非技術開發人員的我們同樣需要識記一下這些信息,在下載安裝包、安裝應用到手機時,都是非常有用的。目前
3種上傳圖片並實現預覽的方法
load app chunks isp 賦值 response with span attr 在常見的用戶註冊頁面,需要用戶在本地選擇一張圖片作為頭像,並同時預覽。 常見的思路有兩種:一是將圖片上傳至服務器的臨時文件夾中,並返回該圖片的url,然後渲染在html頁面;另一種
selenium實戰 二 進入博客園,上傳圖片並發帖
編輯 sendkeys arr accept 圖片 .cn ledir car spa 1 #-*- coding:utf-8 -*- 2 __author__ = "carry" 3 4 from selenium import webdriver 5 im