Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Android手机上传图像到我的服务器的最简单方法是什么_Android_File Upload - Fatal编程技术网

从Android手机上传图像到我的服务器的最简单方法是什么

从Android手机上传图像到我的服务器的最简单方法是什么,android,file-upload,Android,File Upload,我研究这个话题已经有一段时间了,但我一事无成。我买的书和我找到的每个示例/博客都解释了如何使用HttpClient、HttpPost和MultipartEntity对象上传文件。每当我使用这种方法时,我都会遇到以下几件事中的一件: 我的应用程序将崩溃。Android告诉我应用程序意外停止,我不得不强制关闭它 如果我使用包含MultipartEntity的代码,而不包括图像文件(使用addPart()),则我的PHP服务器将接收POST数据 我需要一个简单而直接的方法来完成这个过程。我甚至尝试过F

我研究这个话题已经有一段时间了,但我一事无成。我买的书和我找到的每个示例/博客都解释了如何使用HttpClient、HttpPost和MultipartEntity对象上传文件。每当我使用这种方法时,我都会遇到以下几件事中的一件:

  • 我的应用程序将崩溃。Android告诉我应用程序意外停止,我不得不强制关闭它

  • 如果我使用包含MultipartEntity的代码,而不包括图像文件(使用addPart()),则我的PHP服务器将接收POST数据

  • 我需要一个简单而直接的方法来完成这个过程。我甚至尝试过FTP,我将尝试使用我所拥有的FTPClient示例代码,但到目前为止,我一无所获,通常上传文件是一项非常简单的任务


    如果有人能帮助我,请给我回复。这个项目最难的部分是理解正确的过程,因为我从网上看到的几乎每一个源代码中都能找到许多不同类型的代码。这一主题似乎没有标准,这非常令人沮丧。

    你似乎已经拥有了几乎所有的武器;但是,您是否从新线程发送POST请求?我猜你不是,这就是强制关闭的原因(即挂在应用程序的主线程上)


    如果不是这样的话,你能展示一些代码吗?

    我已经在我的几个Android项目中使用了这段代码,它没有引起任何问题。您可以根据需要对其进行修改。它使用的是,它是应用程序的一部分。希望它也能对你起作用

    /***
    *执行多部分请求,特别是与字节[]相关的内容
    *@param url目标url
    *@param byteArray要上载的字节
    *@param values要添加的其他键/值对
    *@param fileImage图像文件名
    *@param imageFileKey您正在上载的字节的表单键
    *@返回
    *@抛出异常
    */
    公共静态HttpResponse executeMultipartPost(字符串url,字节[]byteArray,
    HashMap值,
    String fileImage、String imageFileKey)引发异常{
    HttpPost postRequest=新的HttpPost(url);
    HttpClient HttpClient=新的DefaultHttpClient();
    Set entries=values.entrySet();
    MultipartEntity multipartContent=新的MultipartEntity();
    对于(Map.Entry当前:条目){
    multipartContent.addPart(current.getKey(),current.getValue());
    }
    InputStreamBody isb=新的InputStreamBody(新的ByteArrayInputStream(byteArray),
    “图像/jpeg”,文件图像);
    addPart(imageFileKey,isb);
    setEntity(multipartContent);
    HttpResponse res=httpClient.execute(postRequest);
    返回res;
    }
    

    确保在xml文件中设置了权限。通常情况下,打开套接字和发送数据需要您在应用程序上设置更高级别的权限,而不仅仅是默认权限。如上所述,对于情况1,您是否在主线程上进行联网?应用程序崩溃时是否存在堆栈跟踪?图像的大小是多少?

    /***
         * Execute multi part request especially for thing related to byte[]
         * @param url The destination URL
         * @param byteArray The byte to upload
         * @param values Additional key/value pair that you want to add
         * @param fileImage The image file name
         * @param imageFileKey The form key for the bytes that you are uploading
         * @return
         * @throws Exception
         */
        public static HttpResponse executeMultipartPost(String url, byte[] byteArray, 
                HashMap<String,  StringBody> values, 
                String fileImage, String imageFileKey)throws Exception {
            HttpPost postRequest = new HttpPost(url); 
            HttpClient httpClient = new DefaultHttpClient();
    
            Set<Map.Entry<String, StringBody>> entries = values.entrySet();
            MultipartEntity multipartContent = new MultipartEntity(); 
    
            for(Map.Entry<String, StringBody> current : entries) {
                multipartContent.addPart(current.getKey(), current.getValue());
            }
    
            InputStreamBody isb = new InputStreamBody(new ByteArrayInputStream(byteArray), 
                    "image/jpeg", fileImage);
            multipartContent.addPart(imageFileKey, isb);
    
            postRequest.setEntity(multipartContent);
            HttpResponse res = httpClient.execute(postRequest);
            return res;
        }