精华内容
下载资源
问答
  • android 图片上传压缩常见问题分析,希望可以帮助大家更加的了解android 图片方面的困惑。下面,是我根据路径从SD卡读取图片,先转换为byte 数组,然后经过base64 编码 转换为string (我是想通过xml将base64 的字符...

    图片的上传与压缩是android经常需要用到的步骤,那么,如何解决上传图片oom问题呢?android 图片上传压缩常见问题分析,希望可以帮助大家更加的了解android 图片方面的困惑。

    下面,是我根据路径从SD卡读取图片,先转换为byte 数组,然后经过base64 编码 转换为string (我是想通过xml将base64 的字符串上传到服务器,服务器端有base64 解码)

    public String getPstr(String pathname)

    {

    String pstr="";

    try {

    if(!pathname.equals(""))

    {

    FileInputStream in;

    in = new FileInputStream(pathname);

    byte buff[] = read(in);//把图片文件流转成byte数组

    //将图片数据 进行BASE64编码

    pstr= new String(Base64.encode(buff,Base64.DEFAULT));

    return pstr;

    }

    } catch (FileNotFoundException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    return null;

    } catch (Exception e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    return null;

    }

    }

    以上就是对于android 图片上传压缩常见问题分析的全部内容,更多有关android方面的内容请继续关注拓胜科技android技术资讯频道,或者需要了解拓胜android培训方面的问题,也可以在线咨询拓胜网络客服。

    展开全文
  • uploadNameGender请选择一个上传文件 注意enctype="multipart/form-data" (复杂的数据提交)和{pageContext.request.contextPath}/upload.do工程访问路径还有就是字符集统一使用utf-8 小心中文乱码。2.服务器端...

    直接上浏览器端upload.jsp代码(为测试服务器端)

    pageEncoding="utf-8"%>

    upload

    Name

    Gender

    请选择一个上传文件

    注意enctype="multipart/form-data" (复杂的数据提交)和{pageContext.request.contextPath}/upload.do工程访问路径

    还有就是字符集统一使用utf-8 小心中文乱码。

    2.服务器端,采用commons-fileupload  来实现文件上传,仍然使用Servlet

    commons-fileupload-1.3.1.jar+ commons-io-2.4.jar(本人出现兼容报错)

    代码如下

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    request.setCharacterEncoding("utf-8");

    response.setCharacterEncoding("utf-8");

    //判断是否是复杂表单提交

    boolean isMutipart=ServletFileUpload.isMultipartContent(request);

    //

    if(isMutipart)

    {

    //配置缓存工厂

    DiskFileItemFactory factory=new DiskFileItemFactory();

    //设置缓存大小

    factory.setSizeThreshold(1024*1024*2);

    File temp=new File("D:\\temp");

    if (!temp.exists()) {

    temp.mkdir();

    }

    factory.setRepository(temp);

    ServletFileUpload upload=new ServletFileUpload(factory);

    // upload.setHeaderEncoding("utf-8");

    upload.setFileSizeMax(1024*1024*5);

    upload.setSizeMax(1024*1024*6);

    //获取提交的集合

    try {

    Listitems=upload.parseRequest(request);

    if(items!=null)

    {

    for(FileItem item :items)

    {

    if(item.isFormField())

    {

    //一般数据

    System.out.println(item.getFieldName());

    System.out.println(item.getString("utf-8"));

    }

    else {

    String pathString=item.getName();

    if(pathString.contains("\\"))

    {

    int index=pathString.lastIndexOf("\\");

    pathString=pathString.substring(index+1);

    }

    System.out.println(pathString);

    //复杂文件

    try {

    item.write(new File("D:\\"+pathString));

    response.getWriter().write("upload success!");

    } catch (Exception e) {

    e.printStackTrace();

    response.getWriter().write("upload fail.");

    }

    }

    }

    }

    } catch (FileUploadException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    else {

    return;

    }

    }

    传送门:

    [rar文件] andriod、iOS服务器端代码之文件上传

    展开全文
  • 1.多图上传首先得选择图片(这里项目需求是既可以拍照上传也可以从相册中选择)2.拍照上传很简单了网上也有很多例子,调用照相机,返回uri,获取图片3.从相册中选择图片3.1 获取手机中的所有图片3.2 将图片存到自定义...

    首先具体分析一下,实现的功能,其中需求分析是必不可少的,需求、逻辑清除之后,再上手写代码,思路会很清晰。

    1.多图上传首先得选择图片(这里项目需求是既可以拍照上传也可以从相册中选择)

    2.拍照上传很简单了网上也有很多例子,调用照相机,返回uri,获取图片

    3.从相册中选择图片

    3.1 获取手机中的所有图片

    3.2 将图片存到自定义图片数组中显示

    3.3 自定义ViewPager浏览图片

    主要的逻辑大体是这样,下面具体看一下实现:

    一、首先看一下界面:

    android:id="@+id/noScrollgridview"

    android:layout_marginLeft="@dimen/smaller_space"

    android:layout_marginRight="@dimen/smaller_space"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:horizontalSpacing="3dp"

    android:listSelector="@color/transparent"

    android:numColumns="3"

    android:scrollbars="none"

    android:layout_gravity="center"

    android:layout_marginTop="@dimen/smaller_space"

    android:verticalSpacing="5dp" />

    是一个 NoScrollGridView,项目需要,所以用了不滚动的GridView,大家用GridView也是一样的。

    noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);

    noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));

    /*新建传值给adapter*/

    if (file == null) {

    picAdapter = new PictureAdapter(this, 0, null);

    } else {

    //添加失败的图片到数组中

    for (int i=0;i

    ImageItem imageItem = new ImageItem();

    imageItem.setImagePath(file.getMulFailFilePaths()[i].trim());

    Bimp.tempSelectBitmap.add(imageItem);

    }

    /*上传失败传值给adapter*/

    picAdapter = new PictureAdapter(this, 2, file);

    }

    这个是初始化图片数组,适配器(新建、上传失败、上传成功的图片我用的都是一个adapter)

    ImageItem是图片的模型,下面有它的属性

    //从图库选择的图片model

    public class ImageItem extends File implements Serializable {

    @Id

    public String imageId; //图片id

    public String thumbnailPath;

    public String imagePath; //图片路径

    private Bitmap bitmap;

    public boolean isSelected = false;

    public String getImageId() {

    return imageId;

    }

    public void setImageId(String imageId) {

    this.imageId = imageId;

    }

    public String getThumbnailPath() {

    return thumbnailPath;

    }

    public void setThumbnailPath(String thumbnailPath) {

    this.thumbnailPath = thumbnailPath;

    }

    public String getImagePath() {

    return imagePath;

    }

    public void setImagePath(String imagePath) {

    this.imagePath = imagePath;

    }

    public boolean isSelected() {

    return isSelected;

    }

    public void setSelected(boolean isSelected) {

    this.isSelected = isSelected;

    }

    [java] view plain copy print?

    /*根据图片路径获取图片的bitmap*/

    public Bitmap getBitmap() {

    if(bitmap == null){

    try {

    bitmap = Bimp.revitionImageSize(imagePath);

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    return bitmap;

    }

    public void setBitmap(Bitmap bitmap) {

    this.bitmap = bitmap;

    }

    接下来是适配器:

    由于涉及到添加图片,adapter中添加一个flag用来显示新建的图片,将选择的图片添加到公有的图片数组中,初始化的时候加载图片数组显示。(大家在看的时候可以忽略掉我的flag)

    @SuppressLint("HandlerLeak")

    public class PictureAdapter extends BaseAdapter {

    private LayoutInflater inflater;

    private int selectedPosition = -1;

    private boolean shape;

    private int flag = 0;//0 默认新建 1上传成功 2上传失败

    private AppItem_file file;

    public boolean isShape() {

    return shape;

    }

    private Activity context;

    public void setShape(boolean shape) {

    this.shape = shape;

    }

    public PictureAdapter(Activity context,int flag,AppItem_file file) {

    this.context = context;

    inflater = LayoutInflater.from(context);

    this.flag = flag;

    this.file = file;

    }

    // public void update() {

    // loading();

    // }

    public int getCount() {

    if (flag==0){ //新建图片

    if (Bimp.tempSelectBitmap.size() == 6) {

    return 6;

    }

    return (Bimp.tempSelectBitmap.size() + 1);

    }

    else if (flag==1){ //上传成功

    return file.getFileList().size();

    }

    else { //上传失败

    return file.getMulFailFilePaths().length;

    }

    }

    public Object getItem(int arg0) {

    if (flag==1){

    return file.getFileList().get(arg0);

    }else {

    return file.getMulFailFilePaths()[arg0];

    }

    }

    public long getItemId(int arg0) {

    return arg0;

    }

    public void setSelectedPosition(int position) {

    selectedPosition = position;

    }

    public int getSelectedPosition() {

    return selectedPosition;

    }

    public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder = null;

    if (convertView == null) {

    //根据图片的数量加载不同布局

    if (getCount()==1&&flag!=0){

    convertView = inflater.inflate(R.layout.item_published_singal_item,

    parent, false);

    }

    else {

    convertView = inflater.inflate(R.layout.item_published_grida,

    parent, false);

    }

    holder = new ViewHolder();

    holder.image = (ImageView) convertView

    .findViewById(R.id.item_grida_image);

    convertView.setTag(holder);

    } else {

    holder = (ViewHolder) convertView.getTag();

    }

    /**

    * 根据初始化adapter传过来的flag值,去不同的地方找图片

    * flag=0,去Bimp的图片数组中找

    * flag=1,证明上传成功的,去下载好的getFileList中找

    * flag=2,为上传失败的,图片保存在FailFile中的List中

    * 优化图片显示

    */

    if (flag==0){ //新建图片

    if (position == Bimp.tempSelectBitmap.size()) {

    holder.image.setImageBitmap(BitmapFactory.decodeResource(

    convertView.getResources(), R.drawable.icon_add_pic_unfocused));

    if (position == 6) {

    if (flag==0){

    holder.image.setVisibility(View.GONE);

    }

    }

    } else {

    holder.image.setImageBitmap(Bimp.tempSelectBitmap.get(position).getBitmap());

    }

    }

    else if (flag==1){ //上传成功

    // List ids = new ArrayList();

    // for (int i=0;i

    // ids.add(file.getFileList().get(i).getS_id());

    // }

    int id=file.getFileList().get(position).getS_id();

    try {

    // File file= NeedApplication.db.findById(File.class,id);

    String fileBigImgUri =NeedApplication.db.findById(File.class,id).getFileUriBig();

    if (fileBigImgUri!=null&&!"null".equals(fileBigImgUri))

    ImageLoader.getInstance().displayImage((fileBigImgUri).trim(),holder.image);

    } catch (DbException e) {

    e.printStackTrace();

    }

    }

    else { //上传失败

    String url = "file://"+file.getMulFailFilePaths()[position].trim();

    ImageLoader.getInstance().displayImage(url, holder.image);

    }

    return convertView;

    }

    public class ViewHolder {

    public ImageView image;

    }

    }

    下面是自定义相册界面,用来选择图片的

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:background="#E1E0DE"

    >

    android:id="@+id/headview"

    android:layout_width="fill_parent"

    android:layout_height="45dp"

    android:background="@drawable/plugin_camera_title_bar"

    android:gravity="center_vertical"

    android:layout_marginBottom="3dp"

    >

    android:layout_width="60dp"

    android:layout_height="wrap_content"

    android:textSize="14sp"

    android:textColor="#fff"

    android:id="@+id/back"

    android:text="相册"

    android:background="@drawable/plugin_camera_title_btn_back"

    android:layout_marginTop="5dp"

    android:layout_marginBottom="5dp"

    android:layout_centerVertical="true"

    />

    android:layout_width="67dp"

    android:layout_height="wrap_content"

    android:textSize="14sp"

    android:textColor="#fff"

    android:id="@+id/cancel"

    android:text="取消"

    android:background="@drawable/plugin_camera_title_btn_cancel"

    android:layout_centerVertical="true"

    android:layout_marginRight="5dp"

    android:layout_alignParentRight="true"

    />

    android:id="@+id/bottom_layout"

    android:layout_width="match_parent"

    android:layout_height="50dp"

    android:layout_alignParentBottom="true"

    android:background="@drawable/plugin_camera_bottom_bar"

    android:layout_marginTop="3dp"

    >

    android:id="@+id/preview"

    android:layout_width="90dp"

    android:layout_height="wrap_content"

    android:layout_alignParentLeft="true"

    android:layout_centerVertical="true"

    android:layout_marginLeft="10dp"

    android:text="预览"

    android:background="@drawable/plugin_camera_title_btn_preview"

    />

    android:id="@+id/ok_button"

    android:layout_width="90dp"

    android:layout_height="wrap_content"

    android:layout_alignParentRight="true"

    android:layout_centerVertical="true"

    android:layout_marginRight="10dp"

    android:background="@drawable/plugin_camera_ok_btn_state"

    />

    android:id="@+id/myGrid"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:layout_above="@id/bottom_layout"

    android:layout_below="@id/headview"

    android:layout_centerInParent="true"

    android:layout_marginTop="2dp"

    android:horizontalSpacing="10dp"

    android:numColumns="4"

    android:verticalSpacing="10dp"

    android:background="#E1E0DE" />

    android:id="@+id/myText"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:gravity="center"

    android:text="相册没有图片"

    android:textColor="@color/black"

    />

    同样也是用了GridView,获取手机中的图片,添加到数组中,显示

    这里用到了一个AlbumHelper(相册帮助类),网上找的代码,感觉挺好的

    public List getImagesBucketList(boolean refresh) {

    if (refresh || (!refresh && !hasBuildImagesBucketList)) {

    buildImagesBucketList();

    }

    List tmpList = new ArrayList();

    Iterator> itr = bucketList.entrySet()

    .iterator();

    while (itr.hasNext()) {

    Entry entry = (Entry) itr

    .next();

    tmpList.add(entry.getValue());

    }

    return tmpList;

    }

    获取到数据源之后,该显示了,也就是利用的获取图片帮助类里面的方法

    // 初始化,给一些对象赋值

    private void init() {

    helper = AlbumHelper.getHelper();

    helper.init(getApplicationContext());

    contentList = helper.getImagesBucketList(false);

    dataList = new ArrayList();

    for(int i = 0; i

    dataList.addAll( contentList.get(i).imageList );

    }

    back = (Button) findViewById(R.id.back);

    cancel = (Button) findViewById(R.id.cancel);

    cancel.setOnClickListener(new CancelListener());

    back.setOnClickListener(new BackListener());

    preview = (Button) findViewById(R.id.preview);

    preview.setOnClickListener(new PreviewListener());

    intent = getIntent();

    Bundle bundle = intent.getExtras();

    gridView = (GridView) findViewById(R.id.myGrid);

    gridImageAdapter = new AlbumGridViewAdapter(mContext,dataList,Bimp.tempSelectBitmap);

    gridView.setAdapter(gridImageAdapter);

    tv = (TextView) findViewById(R.id.myText);

    gridView.setEmptyView(tv);

    okButton = (Button) findViewById(R.id.ok_button);

    okButton.setText("完成"+"(" + Bimp.tempSelectBitmap.size()

    + "/"+ NeedApplication.picNums+")");

    }

    gridImageAdapter

    .setOnItemClickListener(new AlbumGridViewAdapter.OnItemClickListener() {

    @Override

    public void onItemClick(final ToggleButton toggleButton,

    int position, boolean isChecked,Button chooseBt) {

    if (Bimp.tempSelectBitmap.size() >= NeedApplication.picNums) {

    toggleButton.setChecked(false);

    chooseBt.setVisibility(View.GONE);

    if (!removeOneData(dataList.get(position))) {

    Toast.makeText(AlbumActivity.this, "超出可选图片张数", Toast.LENGTH_SHORT).show();

    }

    return;

    }

    if (isChecked) {

    chooseBt.setVisibility(View.VISIBLE);

    Bimp.tempSelectBitmap.add(dataList.get(position));

    okButton.setText("完成"+"(" + Bimp.tempSelectBitmap.size()

    + "/"+ NeedApplication.picNums+")");

    } else {

    Bimp.tempSelectBitmap.remove(dataList.get(position));

    chooseBt.setVisibility(View.GONE);

    okButton.setText("完成"+"(" + Bimp.tempSelectBitmap.size() + "/"+ NeedApplication.picNums+")");

    }

    isShowOkBt();

    }

    });

    点击图片选择加到公有图片数组中显示已选择。

    最后是预览图片,利用自定义viewpager,实现图片滑动,下面贴两张截图吧:

    9b9a9ce0c3b724c783472291eebae821.png

    以上就是本文的全部内容,希望对大家的学习有所帮助。

    展开全文
  • 方法一、利用OKhttp上传图片 /** * 利用OKhttp上传图片 */ private void UpLoadPicture() { //判断文件夹中是否有文件存在 File file = new File(getExternalCacheDir(),"output_image.jpg"); if (!file....

    方法一、利用OKhttp上传图片

    
       /**
         * 利用OKhttp上传图片
         */
        private void UpLoadPicture() {
            //判断文件夹中是否有文件存在
            File file = new File(getExternalCacheDir(),"output_image.jpg");
            if (!file.exists()){
                Toast.makeText(getApplicationContext(),"文件不存在",Toast.LENGTH_SHORT).show();
                return;
            }
            OkHttpClient client = new OkHttpClient();
            //String imgPath = getExternalCacheDir().getPath() + "/output_image.jpg";
            MultipartBody.Builder builder = new MultipartBody.Builder();
            builder.addFormDataPart("file",imgPath, RequestBody.create(MediaType.parse("image/jpg"),new File(imgPath)));
            RequestBody requestBody = builder.build();
            Request.Builder reqBuilder = new Request.Builder();
            Request request = reqBuilder
                    .url("http://192.168.201.211:8000/yks/file/server/")
                    .post(requestBody)
                    .build();
            Call call = client.newCall(request);
            call.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                          //  aBuilder.dismiss();
                            Toast.makeText(getApplicationContext(),"上传失败",Toast.LENGTH_SHORT).show();
                        }
                    });
                }
    
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    final String resp = response.body().toString();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                          //  aBuilder.dismiss();
                            Toast.makeText(getApplicationContext(),resp,Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            });
        }
    

    方法二、newpda

        /**
         * 上传图片到服务器
         * @param path
         */
        public final void upLoadFile(String path) {
            new FileUpLoadManager().upLoadFile(path, new FileUpLoadManager.FileUpLoadCallBack() {
    
                @Override
                public void onError(Throwable e) {
                    //Toast.makeText(,"上传失败,请稍后重试",Toast.LENGTH_LONG).show();
    
                }
    
                @Override
                public void onSuccess(String url) {
                    Log.e("图片上传成功",url);
                  // Toast.makeText(AddProductActivity.this,url, Toast.LENGTH_LONG).show();
                   // upload.setText("已上传");
                   // upload.setBackgroundColor(Color.parseColor("#32cd32"));
                    //   upload.setClickable(false);
    
    
                }
    
                @Override
                public void onProgress(int pro) {
    
                }
            });
        }
    
    
    package com.example.baseactivity;
    
    import android.util.Log;
    
    import com.google.gson.Gson;
    
    import java.io.File;
    import java.util.concurrent.TimeUnit;
    
    import javax.net.ssl.HostnameVerifier;
    import javax.net.ssl.SSLSession;
    
    import io.reactivex.Observable;
    import io.reactivex.ObservableEmitter;
    import io.reactivex.ObservableOnSubscribe;
    import io.reactivex.Observer;
    import io.reactivex.android.schedulers.AndroidSchedulers;
    import io.reactivex.disposables.Disposable;
    import io.reactivex.schedulers.Schedulers;
    import okhttp3.MediaType;
    import okhttp3.MultipartBody;
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.RequestBody;
    import okhttp3.Response;
    
    public class FileUpLoadManager {
    
        private String FileType_Image = "image";
        private String FileType_Video = "video";
    
        public interface FileUpLoadCallBack {
            void onError(Throwable e);
    
            void onSuccess(String url);
    
            void onProgress(int pro);
        }
    
        public interface FileDownloadCallBack {
    
            void onError(Throwable e);
    
            void onSuccess(String url);
    
        }
    
       // private String UPLOAD_URL = "http://192.168.1.127:8082/uploadFile";
       private String UPLOAD_URL = "http://10.90.1.204:8000/yks/file/server/";
    
        public OkHttpClient getHttpClient() {
            return new OkHttpClient.Builder()
                    .hostnameVerifier(new HostnameVerifier() {
                        @Override
                        public boolean verify(String hostname, SSLSession session) {
                            return true;
                        }
                    })
                    .connectTimeout(1000L * 60 * 3, TimeUnit.MILLISECONDS)
                    .readTimeout(1000L * 60 * 3, TimeUnit.MILLISECONDS)
                    .build();
        }
    
        public void upLoadFile(String path, final FileUpLoadCallBack callBack) {
            MultipartBody.Builder muBuilder = new MultipartBody.Builder();
            muBuilder.setType(MultipartBody.FORM);
            File file = new File(path);
            if (path.endsWith(".PNG") || path.endsWith(".png") ||
                    path.endsWith(".JPG") || path.endsWith(".jpg") ||
                    path.endsWith(".JPEG") || path.endsWith(".jpeg")) {
                RequestBody fileBody = RequestBody.create(MediaType.parse("image/jpg"), file);
                ProgressRequestBody requestBody = new ProgressRequestBody(fileBody, new ProgressRequestListener() {
                    @Override
                    public void onRequestProgress(int pro, long contentLength, boolean done) {
                        Log.d("TAG", "pro=====" + pro );
                        if (callBack != null) {
                            callBack.onProgress(pro);
                        }
                    }
                });
                muBuilder.addFormDataPart(FileType_Image, file.getName(), requestBody);
            } else if (path.endsWith(".rm") || path.endsWith(".rmvb") ||
                    path.endsWith(".mpeg1-4") || path.endsWith(".mov") ||
                    path.endsWith(".dat") || path.endsWith(".wmv") ||
                    path.endsWith(".avi") || path.endsWith(".3gp") ||
                    path.endsWith(".amv") || path.endsWith(".dmv") ||
                    path.endsWith(".flv") || path.endsWith(".mp3")||path.endsWith(".amr")) {
                RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
                ProgressRequestBody requestBody = new ProgressRequestBody(fileBody, new ProgressRequestListener() {
                    @Override
                    public void onRequestProgress(int pro, long contentLength, boolean done) {
                        Log.d("TAG", "pro=====" + pro + "--------position-------");
                        if (callBack != null) {
                            callBack.onProgress(pro);
                        }
                    }
                });
                muBuilder.addFormDataPart(FileType_Video, file.getName(), requestBody);
            }
            Log.d("TAG", "参数设置完毕");
            sendRequest(muBuilder.build(), callBack);
        }
    
        private void sendRequest(MultipartBody build, FileUpLoadCallBack callBack) {
            final Request request = new Request.Builder().url(UPLOAD_URL).post(build).build();
            Observable.create(new ObservableOnSubscribe<String>() {
                @Override
                public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                    Response response = getHttpClient().newCall(request).execute();
                    if (response.isSuccessful()) {
                        String json = response.body().string();
                        Log.e("TAG", "====body1111111111========" + json);
                        try {
                            UpLoadFileBean bean = new Gson().fromJson(json, UpLoadFileBean.class);
                            if (bean.getState().equals("000001")) {
                                Log.e("TAG111", "====bod==" + json);
                                emitter.onNext(bean.getData());
                            }
                        }catch (Exception e){
                            e.printStackTrace();
                        }
    
                    } else {
                        emitter.onError(new IllegalStateException(response.message()));
                    }
                }
            }).subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(getObserver(callBack));
        }
    
        private Observer<String> getObserver(final FileUpLoadCallBack callBack) {
            Observer<String> observer = new Observer<String>() {
    
                @Override
                public void onSubscribe(Disposable d) {
    
                }
                @Override
                public void onNext(String strings) {
                    if (callBack != null) {
                        callBack.onSuccess(strings);
                    }
                }
    
                @Override
                public void onError(Throwable e) {
                    if (callBack != null) {
                        callBack.onError(e);
                    }
                }
    
                @Override
                public void onComplete() {
    
                }
            };
            return observer;
        }
    
        private Observer<String> getObserverDownload(final FileDownloadCallBack callBack) {
            Observer<String> observer = new Observer<String>() {
    
                @Override
                public void onSubscribe(Disposable d) {
    
                }
                @Override
                public void onNext(String strings) {
                    if (callBack != null) {
                        callBack.onSuccess(strings);
                    }
                }
    
                @Override
                public void onError(Throwable e) {
                    if (callBack != null) {
                        callBack.onError(e);
                    }
                }
    
                @Override
                public void onComplete() {
    
                }
            };
            return observer;
        }
    
       /* public void downloadFile(String url, final String fileName, final FileDownloadCallBack callBack){
            final Request request = new Request.Builder()
                    .url(url)
                    .build();
            Observable.create(new ObservableOnSubscribe<String>() {
                @Override
                public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                    Response response = getHttpClient().newCall(request).execute();
                    if (response.isSuccessful()) {
                        InputStream is = null;
                        byte[] buf = new byte[2048];
                        int len = 0;
                        FileOutputStream fos = null;
    
                        //储存下载文件的目录
                        File dir = new File(CBVoice.DEF_FILEPATH);
                        if (!dir.exists()) {
                            dir.mkdirs();
                        }
                        File file = new File(dir,fileName);
                        try {
                            is = response.body().byteStream();
                            long total = response.body().contentLength();
                            fos = new FileOutputStream(file);
                            long sum = 0;
                            while ((len = is.read(buf)) != -1) {
                                fos.write(buf, 0, len);
                                sum += len;
                                int progress = (int) (sum * 1.0f / total * 100);
                                //下载中更新进度条
                            }
                            fos.flush();
                            //下载完成
                            callBack.onSuccess(file.getAbsolutePath());
                        }catch (Exception e){
                            callBack.onError(e);
                        }finally {
                            try {
                                if (is != null) {
                                    is.close();
                                }
                                if (fos != null) {
                                    fos.close();
                                }
                            } catch (IOException e) {
    
                            }
                        }
                    } else {
                        emitter.onError(new IllegalStateException(response.message()));
                    }
                }
            }).subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(getObserverDownload(callBack));
        }*/
    
        public static Boolean whereExists(String filePath){
            if (filePath.isEmpty()){return false;}
            File file = new File(filePath);
            return file.exists() ? true: false;
        }
    
    }
    
    

    方法三、

        /**
         * android上传文件到服务器
         * @param file  需要上传的文件
         * @param // RequestURL  请求的rul
         * @return  返回响应的内容
         */
        public void uploadFile(File file, Map<String, String> param){
    
            // Android 4.0 之后不能在主线程中请求HTTP请求
            new Thread(new Runnable(){
                @Override
                public void run() {
                    String RequestUrl="http://192.168.201.211:8000/yks/file/server/";
                    String result = null;
                    String  BOUNDARY =  UUID.randomUUID().toString();  //边界标识   随机生成
                    String PREFIX = "--" , LINE_END = "\r\n";
                    String CONTENT_TYPE = "multipart/form-data";   //内容类型
                    // 显示进度框
                    //showProgressDialog();
                    try {
                        URL url = new URL(RequestUrl);
                        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                        conn.setReadTimeout(20000);
                        conn.setConnectTimeout(20000);
                        conn.setDoInput(true);  //允许输入流
                        conn.setDoOutput(true); //允许输出流
                        conn.setUseCaches(false);  //不允许使用缓存
                        conn.setRequestMethod("POST");  //请求方式
                        // conn.setRequestProperty("Charset", CHARSET);  //设置编码
                        //  conn.setRequestProperty("connection", "keep-alive");
                        // conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY)
                        ;
                        if(file!=null){
                            /**
                             * 当文件不为空,把文件包装并且上传
                             */
                            DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
                            StringBuffer sb = new StringBuffer();
    
                            String params = "";
                            if (param != null && param.size() > 0) {
                                Iterator<String> it = param.keySet().iterator();
                                while (it.hasNext()) {
                                    sb = null;
                                    sb = new StringBuffer();
                                    String key = it.next();
                                    String value = param.get(key);
                                    sb.append(PREFIX).append(BOUNDARY).append(LINE_END);
                                    sb.append("Content-Disposition: form-data; name=\"").append(key).append("\"").append(LINE_END).append(LINE_END);
                                    sb.append(value).append(LINE_END);
                                    params = sb.toString();
                                    Log.i(TAG, key+"="+params+"##");
                                    dos.write(params.getBytes());
    //                      dos.flush();
                                }
                            }
                            sb = new StringBuffer();
                            sb.append(PREFIX);
                            sb.append(BOUNDARY);
                            sb.append(LINE_END);
                            /**
                             * 这里重点注意:
                             * name里面的值为服务器端需要key   只有这个key 才可以得到对应的文件
                             * filename是文件的名字,包含后缀名的   比如:abc.png
                             */
                            sb.append("Content-Disposition: form-data; name=\"upfile\";filename=\""+file.getName()+"\""+LINE_END);
                            sb.append("Content-Type: image/pjpeg; charset="+CHARSET+LINE_END);
                            sb.append(LINE_END);
                            dos.write(sb.toString().getBytes());
                            InputStream is = new FileInputStream(file);
                            byte[] bytes = new byte[1024];
                            int len = 0;
                            while((len=is.read(bytes))!=-1){
                                dos.write(bytes, 0, len);
                            }
                            is.close();
                            dos.write(LINE_END.getBytes());
                            byte[] end_data = (PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes();
                            dos.write(end_data);
    
                            dos.flush();
                            /**
                             * 获取响应码  200=成功
                             * 当响应成功,获取响应的流
                             */
    
                            int res = conn.getResponseCode();
                            System.out.println("res========="+res);
                            if(res==200){
                                Log.e("hhhhhhh","成功成功成功成功成功成功成功成功成功成功成功成功成功成功成功成功成功成功");
                                ToastUtils.show("成功成功成功成功成功成功成功成功成功成功成功成功成功成功成功成功成功成功");
                                InputStream input =  conn.getInputStream();
                                StringBuffer sb1= new StringBuffer();
                                int ss ;
                                while((ss=input.read())!=-1){
                                    sb1.append((char)ss);
                                }
                                result = sb1.toString();
    //                 // 移除进度框
    //    				removeProgressDialog();
                                // finish();
                            }
                            else{
                                Log.e("hhhhhhh","请求失败");
                            }
                        }
                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                   // Log.e("hhhhhhh",result);
                   // ToastUtils.show(result);
                   // return result;
                }
            }).start();
    
    
    
        }
    
    

    方法四:

     public void img(File file){
            OkHttpUtils.post().url("http://10.90.1.204:8000/yks/file/server/")
                    .addFile("file",System.currentTimeMillis()+".jpg",file)
                    .tag(this)
                    .build()
                    .connTimeOut(20000)
                    .readTimeOut(20000)
                    .execute(new StringCallback() {
                        @Override
                        public void onError(Call call, Exception e, int id) {
                            ToastUtils.show(e.getMessage());
                        }
    
                        @Override
                        public void onResponse(String response, int id) {
                            try {
                                JSONObject object = new JSONObject(response);
                                String state = object.getString("state");
                                String msg = object.getString("msg");
                                ToastUtils.show(msg);
                            } catch (JSONException e) {
                                e.printStackTrace();
                                ToastUtils.show(e.getMessage());
                            }
                        }
                    });
        }
    

    方法五:

        /**
         * post请求
         */
        public void uploadImage(File file) {
            List<File> fileList=new ArrayList<>();
            fileList.add(file);
            EasyHttp.post("http://10.90.1.204:8000/yks/file/server/")
    //                .addHeader("group","rpc-service-group-test")
                    .addFileParams("file", fileList, new ProgressResponseCallBack() {
                        @Override
                        public void onResponseProgress(long bytesWritten, long contentLength, boolean done) {
    
                        }
                    })
                    .accessToken(true)
                    .timeStamp(true)
                    .execute(new SimpleCallBack<String>() {
                        @Override
                        public void onError(ApiException e) {
                            ToastUtils.show(e.getMessage());
                        }
    
                        @Override
                        public void onSuccess(String response) {
                            ToastUtils.show(response);
                        }
                    });
        }

     

    展开全文
  • 我正在做一个项目,我必须使用URL将Image上传到服务器.但是当我上传文件时,文件在服务器中已损坏,当我打开文件时,它显示错误消息“文件已损坏”.我怎样才能克服这个问题.这是我的代码:String lineEnd = "\r\n";...
  • Android图片上传的两种方式

    千次阅读 2021-10-22 13:16:32
    图片上传,以及带参数的图片上传Android开发中,很常见的需求。但也是接口联调难度相对比较大的技术实现,本文介绍两种可靠的图片上传方式。一是通过 MultipartBody 来实现;二是通过图片转字符串来实现。 一、...
  • 大体部分与post提交类似,只是需要设置MultipartEntity代码如下:public class userUploadServiceImpl implements userUploadService{@Overridepublic String userUpload(InputStream in, Map data,String path) ...
  • 本文实例为大家分享了android上传本地图片到网络的具体代码,供大家参考,具体内容如下首先这里用到了Okhttp 所以需要一个依赖:compile 'com.squareup.okhttp3:okhttp:3.9.0'xml布局xmlns:app=...
  • 老规矩废话不多说,直接入主题注:wcf 使用rest风格,传递json数据,图片是经过base64编码,android 使用common-codec-1.5.jar 进行base64编码服务器端wcf接口:namespace Test{// 注意: 如果更改此处的接口名称 ...
  • 最近在开发中,涉及到用户的意见反馈功能这一方面的开发,需要用户输入的文字或者提交的图片,效果大概类似于微信朋友圈那样的图片选择器,一开始自己找了个用universal-image-loader框架写的,很容实现,但是容易...
  • 分析1、用xml文件画一个正方形的shape2、利用ClipdDrawable来实现图片的动态剪切3、使用AsynTask来控制图片的上传,然后动态的改变ClipDrawable.setLevel()方法中的值,这样基本就能达到图片上传蒙层的效果。...
  • 最近在实现一个多图上传的功能(以流的形式上传),发现当上传图片超过5张的时候,就会报内存溢出的问题,去相册查看了一下,原来现在每张照片都占到2,3mb,如果几张大图就这么直接加载到内存中,肯定会溢出的,因此...
  • import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.IBinder; import android.os.Looper; import ...
  • packagenewairtek....importcom.android.volley.AuthFailureError;importcom.android.volley.NetworkResponse;importcom.android.volley.Request;importcom.android.volley.Response;importcom.android.volle...
  • 前言 最近项目中有个需求是打卡签到功能 要求:人脸拍照 上传服务器 这个功能之前使用@...图片上传之字符串加解密BASE64Encoder 在上传图片之前先把图片的路径拿到 例如 /storage/emulated/0/Documents/Pic_1631
  • Android上传图片工具类

    2021-05-26 11:42:30
    /*** 图片上传*/public class UpLoadUtil {private static final String TAG ="uploadFile";private static final int TIME_OUT =10 *1000; // 超时时间private static final String CHARSET ="utf-8"; // 设置编码/...
  • 也许你查看了很多博客也没有解决“如何将一张手机图片上传到服务器”?,本博客将已最原始的方式,以一个萌新的角度非常细致的讲解,以最原始的方式解决你的问题。 我一开始弄这个也花了很多时间,踩了很多坑,才弄...
  • 服务器是WCF REST服务器,我用它做了很多其他的通信(JSON),但只是有了上传图像的新要求。由于我使用JSON将数据发布到我的服务器 – 我在Android端使用GSON来序列化数据。这是我到目前为止实现它的方式(其他一切都以...
  • 网上也有很多使用教程,这里主要简单说下用它以form表单上传图片的方法。官网http://square.github.io/retrofit/github https://github.com/square/retrofit1.添加gradle引用compile 'com.squareup.retro...
  • Uri otherPath = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + resources.getResourcePackageName(R.drawable.image) + '/' + resources.getResourceEntryName(R.drawable.eimage)); String path ...
  • 在这里,我想用一些数据的图像上传到我的服务器(捕从画廊或相机)的图像..我试图通过retrofit2实现这一目标。 试图从网上一些方法......但我不能得到正确的方式来完成它新的retrofit2。所以我不能做到这一点。如何...
  • php处理ios图片上传。尝试各种方法之后,终于成功了。下面我就记录php处理ios图片上传的功能。开发之前有几个注意事项:1、编码格式。我这里采用的是base64编码格式。2、如果是linux系统,一定要注意了,你保存的...
  • 今天许多新用户反馈app无法上传图片,都是Android10及以上。 ios能正常上传,且看不到后台日志。 第一步:复现问题 用测试机能够正常上传,没有和用户同机型的真机无法调试。于是上云真机(远程调试)复现情况。 推荐...
  • 1、仿照微信空间上传图片,显示图片数量以及超过最大,上传按钮隐藏功能2、上效果图3、上代码,主要是Adapter类/*** Created by zhangyinlei on 2018/3/2 0002.*/public class AlbumSelectedShowAdapter extends ...
  • 一 、阿里的官方文档二、Android图片上传的流程 + OSS选择图片压缩图片构建阿里上传请求对象OSS构建阿里的文件上传对象PutObjectRequestPutObjectRequest设置上传进度监听OSS对象发起请求asyncPutObject前面2步我就...
  • http://blog.csdn.net/lmj623565791/article/details/23781773文件上传是我们项目中经常使用的功能,一般我们的服务器可能都是web服务器,当我们使用非浏览器客户端上传文件时,比如手机(Android)等上传,可能就需要...
  • 类似地,您可以为Image url,步骤:1)创建一个将为每个图像运行的线程.2)之后,每张图片上传都会给你回复.3)现在可以为每个图像更新您的UI.//TODO: Multiple file uploadpublic class FileUpload implements Runnable {...
  • ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,不用让用户等待下去,下面就说实现方法,先贴上主方法的代码:package cn.wangmeng.test;importJava.io....
  • android图片上传后台后旋转的关键原因:ExifInterface 不解决只简单说明原因 app内有上传图片到相册的功能,大部分图片上传没啥问题,用时间久了发现某些图片上传之前好好的,上传后在APP内展示就莫名的旋转了,找了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,980
精华内容 25,192
关键字:

android图片上传