android图片上传错误

Jping 发布于 2017/06/01 14:21
阅读 150
收藏 0

大家好:

本人开发的一个android项目,需收集用户的影像信息,项目上线后发现,有些手机传上来的图片存在问题,图片传递的不全。这些有问题的手机有时候又能正确传递。有没有遇到过这样问题的伙伴,求帮忙。

android端上传的代码:

public class HttpUploadTask extends HttpNetTask
{

    // 固定大小线程池
    private static final ExecutorService EXECUTOR_SERVICE_UPLOAD = Executors.newFixedThreadPool(5);

    private Handler mHandler;
    private String mFilePath;
    private byte[] source;

    /**
     * 上传标签,用以区分多个同时进行上传的任务
     */
    private String mFileName;

    public HttpUploadTask(Handler mHandler, String filePath, String fileName)
    {

        this.mHandler = mHandler;
        this.mFilePath = filePath;
        this.mFileName = fileName;
    }

    public HttpUploadTask(Handler mHandler, byte[] source, String fileName)
    {

        this.mHandler = mHandler;
        this.source = source;
        this.mFileName = fileName;
    }

    @Override
    public void execute(String url)
    {
        EXECUTOR_SERVICE_UPLOAD.submit(wapperTask(url));
    }

    @Override
    public Runnable wapperTask(final String url)
    {
        return new Runnable()
        {

            @Override
            public void run()
            {

                BigFileUploadResponseVO bigFileUploadResponseVO = null;
                try
                {
                    if (source != null)
                    {
                        bigFileUploadResponseVO = HttpBase.uploadBigFile(url, source);
                    } else
                    {
                        bigFileUploadResponseVO = HttpBase.uploadBigFile(url, mFilePath);
                    }
                    if (bigFileUploadResponseVO != null)
                    {
                        bigFileUploadResponseVO.setFileName(mFileName);
                    } else
                    {
                        bigFileUploadResponseVO = new BigFileUploadResponseVO();
                        bigFileUploadResponseVO.setCode(ResultCode.ERROR);
                        bigFileUploadResponseVO.setFileName(mFileName);
                    }
                    if (mHandler != null)
                    {
                        Message message = mHandler.obtainMessage();
                        message.obj = bigFileUploadResponseVO;
                        mHandler.sendMessage(message);
                    }
                } catch (Exception e)
                {
                    e.printStackTrace();

                    bigFileUploadResponseVO = new BigFileUploadResponseVO();
                    bigFileUploadResponseVO.setCode(ResultCode.ERROR);
                    bigFileUploadResponseVO.setFileName(mFileName);
                    if (mHandler != null)
                    {
                        Message message = mHandler.obtainMessage();
                        message.obj = bigFileUploadResponseVO;
                        mHandler.sendMessage(message);
                    }
                }
            }
        };
    }

}
 

--------------------------

/**
     * 大文件上传
     * 
     * @param url
     * @param filePath
     */
    public static BigFileUploadResponseVO uploadBigFile(String url, String filePath) throws Exception
    {
        /*
         * 断点下载的时候可以不使用RandomAccessFile的原因是,file流可以自动接着已有文件后面写,不一定要覆盖
         */

        // filePath = FilePathUtil.getSdcardPath()
        // + "/com.ulic.misp/image/loading.png";

        URL uploadUrlObj = null;
        HttpURLConnection connection = null;
        RandomAccessFile randomFile = null;
        OutputStream outPutStream = null;
        BufferedReader bufferReader = null;
        // 不可将byte数组定义为通用的,多个线程就同时使用一个缓冲了
        byte[] bufferRead = new byte[1024 * 2];

        Log.i(tag, "upload url:  " + url);

        uploadUrlObj = new URL(url);
        connection = (HttpURLConnection) uploadUrlObj.openConnection();
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setRequestProperty("Content-Type", "application/octet-stream");
        connection.setRequestMethod("POST");
        connection.setUseCaches(false);
        connection.setAllowUserInteraction(true);
        connection.setChunkedStreamingMode(0);
        connection.connect();

        outPutStream = connection.getOutputStream();

        LogUtil.debug(tag, "filePath is " + filePath);
        randomFile = new RandomAccessFile(filePath, "rw");
        int real = 0;

        while ((real = randomFile.read(bufferRead)) != -1)
        {
            outPutStream.write(bufferRead, 0, real);
        }
        outPutStream.flush();
        // 返回当前文件读取情况
        StringBuffer fileUploadResponse = new StringBuffer();
        bufferReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
        // 发送http请求(头信息),返回输入流,用于读取此次请求的响应信息
        String line = "";
        while ((line = bufferReader.readLine()) != null)
        {
            fileUploadResponse.append(line);
        }
        Log.i(tag, "服务器返回的响应信息:" + fileUploadResponse.toString());

        // {"response":[{"head":[{"code_bool":"1"}]},{"body":[{"value_str":"Successful"}]}]}

        randomFile.close();
        outPutStream.close();
        bufferReader.close();
        connection.disconnect();

        BigFileUploadResponseVO bigFileUploadResponseVO = (BigFileUploadResponseVO) JacksonUtil.toObject(fileUploadResponse.toString(), BigFileUploadResponseVO.class);

        return bigFileUploadResponseVO;
    }

 

 

加载中
0
Jping
Jping

求大牛帮忙~

返回顶部
顶部