<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ***** **圖片上傳的實現** [TOC=6] # 1. 獲取圖庫圖片 ~~~ Intent intent1 = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent1, LOCAL_CROP); ~~~ # 2. 獲取相機拍照圖片 ~~~ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, TAKE_PHOTO); ~~~ # 3. 圖片剪裁 ~~~ Intent intent = new Intent("com.android.camera.action.CROP"); //添加這一句表示對目標應用臨時授權該Uri所代表的文件 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //可以選擇圖片類型,如果是*表明所有類型的圖片 intent.setDataAndType(uri, "image/*"); // 下面這個crop = true是設置在開啟的Intent中設置顯示的VIEW可裁剪 intent.putExtra("crop", "true"); // aspectX aspectY 是寬高的比例,這里設置的是正方形(長寬比為1:1) intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪圖片寬高 intent.putExtra("outputX", 500); intent.putExtra("outputY", 500); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); //是否將數據保留在Bitmap中返回,true返回bitmap,false返回uri intent.putExtra("return-data", false); ~~~ # 4. 圖片回傳的實現 ~~~ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case TAKE_PHOTO: // 拍照 if (resultCode == RESULT_OK) { // 創建intent用于裁剪圖片 Intent intent = new Intent("com.android.camera.action.CROP"); // 設置數據為文件uri,類型為圖片格式 intent.setDataAndType(imageUri, "image/*"); // 允許裁剪 intent.putExtra("scale", true); // 指定輸出到文件uri中 intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); // 啟動intent,開始裁剪 startActivityForResult(intent, CROP_PHOTO); } break; case LOCAL_CROP: // 系統相機 if (resultCode == RESULT_OK) { // 創建intent用于裁剪圖片 Intent intent1 = new Intent("com.android.camera.action.CROP"); // 獲取圖庫所選圖片的uri Uri uri = data.getData(); intent1.setDataAndType(uri, "image/*"); // 設置裁剪圖片的寬高 intent1.putExtra("outputX", 300); intent1.putExtra("outputY", 300); // 裁剪后返回數據 intent1.putExtra("return-data", true); // 啟動intent,開始裁剪 startActivityForResult(intent1, CROP_PHOTO); } case CROP_PHOTO: // 裁剪后 if (resultCode == RESULT_OK) { try { // 展示拍照后裁剪的圖片 if (imageUri != null) { // 創建BitmapFactory.Options對象 BitmapFactory.Options option = new BitmapFactory.Options(); // 屬性設置,用于壓縮bitmap對象 option.inSampleSize = 2; option.inPreferredConfig = Bitmap.Config.RGB_565; // 根據文件流解析生成Bitmap對象 Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri), null, option); // 展示圖片 ivHead.setImageBitmap(bitmap); imageUri = null; return; } // 展示圖庫中選擇裁剪后的圖片 if (data != null) { // 根據返回的data,獲取Bitmap對象 Bitmap bitmap = data.getExtras().getParcelable("data"); // 展示圖片 ivHead.setImageBitmap(bitmap); data = null; return; } } catch (Exception e) { e.printStackTrace(); } } } } ~~~ # 5. 側滑頭像上傳 關于文件上傳功能,現在的移動開發中有很多好的網絡框架提供這個功能。早期開發Android時網絡框架少,只能靠自己手寫。雖然現在不用自己手寫,但是弄明白原理還是很有必要的。 ~~~ POST請求頭 1. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,\*/\*;q=0.8,application/signed-exchange;v=b3 2. Accept-Encoding: gzip, deflate, br 3. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8 4. Cache-Control: max-age=0 5. Connection: keep-alive 6. Content-Length: 57451 7. Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryB94bWqqQGVspXSJd 8. Host: localhost:8080 9. Origin: http://localhost:8080 10. Referer: http://localhost:8080/ 11. Upgrade-Insecure-Requests: 1 12. User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10\_14\_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36 ~~~ ~~~ 請求體 ------WebKitFormBoundary6TAB8KxvuJTZYfUn // 第一行,是“--”字符串(不包括引號)和請求頭中的boundary拼成的字符串 Content-Disposition: form-data; name="username" // 第二行是固定的Content-Disposition: form-data;和name="請求的參數名稱" 二者拼接的字符串 // 這里是空行 sdafdsa //這是請求的參數,就是username的具體值 ------WebKitFormBoundary6TAB8KxvuJTZYfUn // 和第一行一樣,是“--”字符串(不包括引號)和請求頭中的boundary拼成的字符串 Content-Disposition: form-data; name="f"; filename="default_launcher.conf" // 和第二行類似,但是因為是文件,所以多了一個filename參數,是指你上傳的文件名 Content-Type: application/octet-stream // 文件的minetype // 這里有個空行,下面是要上傳的文件內容 packageName=com.cy.chineseonline className=com.cy.chineseonline.activity.MainActivity // 這里有個空行,上面是要上傳的文件內容 ------WebKitFormBoundary6TAB8KxvuJTZYfUn-- // 最后一行 --和boundary和--拼接的字符串 ~~~ ~~~ private static final String nextLine = "\r\n"; private static final String twoHyphens = "--"; //分割線 隨便寫一個 private static final String boundary = "wk_file_2519775"; new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... voids) { File file = new File(filePath); HttpURLConnection connection = null; try { URL url1 = new URL("http://169.254.78.219:8080/upload"); connection = (HttpURLConnection) url1.openConnection(); connection.setDoOutput(true); // 設置字符集 connection.setRequestProperty("Charsert", "UTF-8"); //設置接收編碼 connection.setRequestProperty("Accept-Charset", "utf-8"); //開啟長連接可以持續傳輸 connection.setRequestProperty("Connection", "keep-alive"); //設置請求參數格式以及boundary分割線 connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); //設置接收返回值的格式 connection.setRequestProperty("Accept", "application/json"); OutputStream outputStream = new DataOutputStream(connection.getOutputStream()); //分隔符頭部 String header = twoHyphens + boundary + nextLine; //分隔符參數設置 header += "Content-Disposition: form-data;name=\"file\";" + "filename=\"" + file.getName() + "\"" + nextLine + nextLine; //寫入輸出流 outputStream.write(header.getBytes()); //讀取文件并寫入 FileInputStream inputStream = new FileInputStream(file); byte[] bytes = new byte[1024]; int length; while ((length = inputStream.read(bytes)) != -1) { outputStream.write(bytes, 0, length); } //文件寫入完成后加回車 outputStream.write(nextLine.getBytes()); //寫入結束分隔符 String footer = nextLine + twoHyphens + boundary + twoHyphens + nextLine; outputStream.write(footer.getBytes()); outputStream.flush(); if (connection.getResponseCode() == 200) { return CharStreams.toString(new InputStreamReader(connection.getInputStream())); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String s) { Log.i(TAG, "" + s); } }.execute(); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看