安卓开发

您所在的位置:网站首页 ios向安卓传照片怎么传不了图片 安卓开发

安卓开发

2024-07-11 16:51| 来源: 网络整理| 查看: 265

(亲测可用)安卓图片(文件)上传到后台,后台保存到服务器 以下代码实现了从安卓客户端上传图片到java后台,java后台保存图片到服务器指定地址:后台(Eclipse--SpringBoot -- Controller)前台(AndroidStudio -- Java)

以下代码实现了从安卓客户端上传图片到java后台,java后台保存图片到服务器指定地址: 后台(Eclipse–SpringBoot – Controller) /** * 接受图片 * * @param request * @param response * @return */ @RequestMapping(value = "meal/uploadimg") public void imgUpload(@RequestParam("file") MultipartFile file,HttpServletResponse response){ System.out.println("执行图片上传!"); //设置服务器上图片保存地址 String path = "G:/img"; File filePath = new File(path); System.out.println("文件的保存路径:" + path); if (!filePath.exists() && !filePath.isDirectory()) { System.out.println("目录不存在,创建目录:" + filePath); filePath.mkdir(); } //获取原始文件名称(包含格式) String originalFileName = file.getOriginalFilename(); originalFileName=originalFileName.replaceAll(",|&|=", ""); System.out.println("原始文件名称:" + originalFileName); //获取文件类型,以最后一个`.`为标识 String type = originalFileName.substring(originalFileName.lastIndexOf(".") + 1); System.out.println("文件类型:" + type); //获取文件名称(不包含格式) String name = originalFileName.substring(0, originalFileName.lastIndexOf(".")); //设置文件新名称: 当前时间+文件名称(不包含格式) Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String date = sdf.format(d); //String fileName ="a"+date + name + "." + type; String fileName =date + "." + type; System.out.println("新文件名称:" + fileName); //在指定路径下创建一个文件 File targetFile = new File(path, fileName); //将文件保存到服务器指定位置 try { file.transferTo(targetFile); System.out.println("上传成功"); //将文件在服务器的存储路径返回 response.setContentType("text/html;charset=utf-8"); response.getWriter().print(fileName); } catch (IOException e) { System.out.println("上传失败"); e.printStackTrace(); } } 前台(AndroidStudio – Java)

使用okkttp3进行传输 需要导入的依赖(导入方法:File->Project Structure ->Dependencies–> --> ±->Search) //数据传输 com.squareup.okhttp3:okhttp:3.4.1 com.squareup.retrofit2:retrofit:2.0.2

图片显示layout文件

这里涉及到点击imgView弹出选择拍照或相册,我使用自定义弹窗实现的

首先在value 的styles中加入

@android:color/transparent @null true true false @null @style/normalDialogAnim true

选择弹窗布局文件dialog_selectupimg.xml:

需要图片上传的Activity文件(caipuguanli.java)

public class caipuguanli extends AppCompatActivity { //ImageView private ImageView i1; private String tupian1; //拍照 private final int OPEN_RESULT = 1;//打开照相机 private final int CHOOSE_PICTURE = 0; //选择相册图片 private String img=""; public static final MediaType JSON=MediaType.parse("application/json; charset=utf-8"); public caipuguanli(){ } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.caipu_guanli); //实例化组件 initView(); permissiongen(); } //组件初始化 private void initView(){ //ImageView i1 = (ImageView)findViewById(R.id.caipu_i1); /** * 图片点击弹出自定义选择框 */ i1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Dialog dialog = new Dialog(caipuguanli.this, R.style.SelectUpload); View view = View.inflate(caipuguanli.this, R.layout.dialog_selectupimg, null); Button paizhao = (Button)view.findViewById(R.id.caipu_paizhao); Button xiangce = (Button)view.findViewById(R.id.caipu_xiangce); Button quxiao = (Button)view.findViewById(R.id.caipu_quxiaoxuanze); dialog.setContentView(view); dialog.setCanceledOnTouchOutside(true); //设置弹窗高度 view.setMinimumHeight((int) (ScreenSizeUtils.getInstance(caipuguanli.this).getScreenHeight() * 0.23f)); Window dialogWindow = dialog.getWindow(); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); //设置弹窗宽度 lp.width = (int) (ScreenSizeUtils.getInstance(caipuguanli.this).getScreenWidth() * 0.5f); lp.height = WindowManager.LayoutParams.WRAP_CONTENT; lp.gravity = Gravity.BOTTOM; dialogWindow.setAttributes(lp); //从相机拍照获得图片 paizhao.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, OPEN_RESULT); } }); //从相册选择图片 xiangce.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*");//相片类型 startActivityForResult(intent, CHOOSE_PICTURE); } }); //取消按钮 quxiao.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); } }); /** *选择图片后上传并显示在imgView */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode){ //拍照获得图片 case OPEN_RESULT: if(resultCode == RESULT_OK){ try{ Bundle bundle = data.getExtras(); Bitmap bitmap = (Bitmap) bundle.get("data"); i1.setImageBitmap(bitmap); //将拍照获得的bitmap转换成图片文件并保存到本地 File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+".jpg"); FileOutputStream fileOutStream = new FileOutputStream(file); try { bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutStream); fileOutStream.flush(); fileOutStream.close(); uploadImage(file); } catch (IOException e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); Log.d("tag",e.getMessage()); Toast.makeText(this,"程序崩溃",Toast.LENGTH_SHORT).show(); } } break; //相册选择图片 case CHOOSE_PICTURE: if(resultCode == RESULT_OK ){ try{ Uri uri = data.getData(); Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri)); i1.setImageBitmap(bitmap); String path = RealPathFromUriUtils.getRealPathFromUri(this,uri); File file = new File(path); uploadImage(file); } catch (Exception e) { e.printStackTrace(); Log.d("tag",e.getMessage()); Toast.makeText(this,"程序崩溃",Toast.LENGTH_SHORT).show(); }} break; } } /** * 上传图片,返回服务器端保存的图片名称 * @param * @return 新图片名称 * @throws IOException * @throws JSONException */ public void uploadImage(File file) { // File file = new File(imagePath); OkHttpClient httpClient = new OkHttpClient(); MediaType mediaType = MediaType.parse("application/octet-stream");//设置类型,类型为八位字节流 RequestBody requestBody = RequestBody.create(mediaType, file);//把文件与类型放入请求体 MultipartBody multipartBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("file", file.getName(), requestBody)//文件名 .build(); Request request = new Request.Builder() .url(caipulist.URL+"meal/uploadimg") .post(multipartBody) .build(); Call call = httpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { System.out.println(e); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(caipuguanli.this,"添加失败!",Toast.LENGTH_SHORT).show(); } }); } @Override public void onResponse(Call call, Response response) throws IOException { //在这里根据返回内容执行具体的操作 final String resdata=response.body().string(); System.out.println(resdata); if (response.code()==200){ runOnUiThread(new Runnable() { @Override public void run() { // Toast.makeText(caipuguanli.this,resdata,Toast.LENGTH_SHORT).show(); tupian1 = resdata; } }); } } }); } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3