2 annbnncnnd AnnBnnCnnD 于 2013.04.15 15:26 提问

使用MultipartEntity图片上传

使用MultipartEntity上传单张图片。用了下面的代码,但是图片没有上传,也没有任何错误提示。

我将所有的数据库都加载了。

 try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost postRequest = new HttpPost(
                    "http://192.168.1.6/uploadimg.php");
            httpClient.getParams().setParameter(
                    CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
            File f = null;
            FileBody fo = null;
            MultipartEntity reqEntity = new MultipartEntity(
                    HttpMultipartMode.BROWSER_COMPATIBLE);
            // code for send image using post method
            f = new File("/mnt/sdcard/a.png");
            fo = new FileBody(f);
            reqEntity.addPart("uploaded", fo);
            Log.i("uploaded", "image added Parameter added");
            postRequest.setEntity(reqEntity);
            HttpResponse response = httpClient.execute(postRequest);
            BufferedReader reader = new BufferedReader(new InputStreamReader(
            response.getEntity().getContent(), "UTF-8"));
            String sResponse;
            StringBuilder s = new StringBuilder();

            while ((sResponse = reader.readLine()) != null) {
                s = s.append(sResponse);
            }
            Log.v("Upload photo", "Response" + s);
            // return getUploadResponce(s.toString());
            // Log.i("Response ", );
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

PHP 文件:

<?php

$file = $_FILES['uploaded']

move_uploaded_file($_FILES['uploaded']['tmp_name'], $_FILES['uploaded']['name']);

            ?>

4个回答

wgw335363240
wgw335363240   2014.11.20 11:41
已采纳

看看服务器的临时目录的权限,ls -l 你的服务器文件移动到的目录,php默认是root的权限,所以可以看下临时目录中是否有上传的文件,如果有,说明是移动文件到目标目录的权限问题;如果临时目录都没有文件,说明是上传代码的问题。

wgw335363240
wgw335363240   2014.11.20 11:41

看看服务器的临时目录的权限,ls -l 你的服务器文件移动到的目录,php默认是root的权限,所以可以看下临时目录中是否有上传的文件,如果有,说明是移动文件到目标目录的权限问题;如果临时目录都没有文件,说明是上传代码的问题。

gopain
gopain   2014.11.30 17:08

项目中的一个方法,仅供参考
KeyValue 是一个只有key和value的基础类,values中是存储所有要发送的文件的地址【ArrayList】

/**
 * 发送文件和基础数据
 * 
 * @param netpath
 * @return
 */
@SuppressWarnings("rawtypes")
public boolean sendForm(String netpath) {

    String path = netpath;
    boolean res = false;
    try {

        HttpPost httpPost = new HttpPost(path);

        MultipartEntityBuilder entityBuilder = MultipartEntityBuilder
                .create();

        // 设置为浏览器兼容模式
        entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        // 设置请求的编码格式
        // entityBuilder.setCharset(Charset.forName(HTTP.UTF_8));
        entityBuilder.setCharset(Charset.forName(HTTP.UTF_8));

        for (KeyValue keyValue : beanData.getKeyvalues()) {
            entityBuilder.addTextBody(
                    keyValue.getKey(),
                    keyValue.getValue(),
                    ContentType.create("text/plain",
                            Charset.forName(this.charset)));
        }
        // Iterator it = paths.entrySet().iterator();
        // while(it.hasNext()){
        // Entry entry = (Entry) it.next();
        // entityBuilder.addBinaryBody("file", new File((String)
        // entry.getValue()));
        // paths.remove(entry.getKey());
        // }
        for (int i = 0; i < values.size(); i++) {
            entityBuilder.addBinaryBody("file", new File(values.get(i)));
        }

        httpPost.setEntity(entityBuilder.build());
        // httpPost.setHeader("Content-type", "text/html;charset=UTF-8");
        HttpResponse response = new DefaultHttpClient().execute(httpPost);
        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            res = true;
            resultString = EntityUtils.toString(response.getEntity(),
                    HTTP.UTF_8);
        }
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return res;
}
cnflexo
cnflexo   2014.12.22 17:29

看看服务器的临时目录的权限?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!