l511329028 2015-05-12 05:45 采纳率: 0%
浏览 2323

android在进行上传图片的时候 getOutPutStream报IOException?

public class Upload {

public static final String TAG = "Upload";
public static final String urlServer = "http://192.168.1.123:8081/door/v1/door/requestOpenDoor";
public static final String pathOfPicture = "/mnt/sdcard/Pictures/Screenshots/image.jpg";
static String lineEnd = "\r\n";


public static void upload() {
    Log.d(TAG, "upload begin");
    HttpURLConnection connection = null;
    DataOutputStream dos = null;
    FileInputStream fin = null;

    String boundary = "---------------------------265001916915724";

    int bytesAvailable, bufferSize, bytesRead;
    int maxBufferSize = 1 * 1024 * 512;
    byte[] buffer = null;

    try {
        Log.d(TAG, "try");
        URL url = new URL(urlServer);
        connection = (HttpURLConnection) url.openConnection();

        // 允许向url流中读写数据
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setUseCaches(true);

        // 启动post方法
        connection.setRequestMethod("POST");

        // 设置请求头内容
        connection.setRequestProperty("connection", "Keep-Alive");
        connection.setRequestProperty("Content-Type", "text/plain");

        // 伪造请求头
        connection.setRequestProperty("Content-Type",
                "multipart/form-data; boundary=" + boundary);

        // 在这里出异常了
        // 开始伪造POST Data里面的数据
        dos = new DataOutputStream(connection.getOutputStream());
        fin = new FileInputStream(pathOfPicture);

        Log.d(TAG, "开始上传images");
        // --------------------开始伪造上传images.jpg的信息-----------------------------------
        String fileMeta = "--"
                + boundary
                + lineEnd
                + "Content-Disposition: form-data; name=\"uploadedPicture\"; filename=\""
                + pathOfPicture + "\"" + lineEnd
                + "Content-Type: image/jpeg" + lineEnd + lineEnd;
        // 向流中写入fileMeta
        dos.write(fileMeta.getBytes());

        // 取得本地图片的字节流,向url流中写入图片字节流
        bytesAvailable = fin.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        buffer = new byte[bufferSize];

        bytesRead = fin.read(buffer, 0, bufferSize);
        while (bytesRead > 0) {
            dos.write(buffer, 0, bufferSize);
            bytesAvailable = fin.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            bytesRead = fin.read(buffer, 0, bufferSize);
        }
        dos.writeBytes(lineEnd + lineEnd);
        // --------------------伪造images.jpg信息结束-----------------------------------
        Log.d(TAG, "结束上传");

        // POST Data结束
        dos.writeBytes("--" + boundary + "--");

        // Server端返回的信息
        System.out.println("" + connection.getResponseCode());
        System.out.println("" + connection.getResponseMessage());

        if (dos != null) {
            dos.flush();
            dos.close();
        }
        Log.d(TAG,
                "upload success-----------------------------------------");
        System.out.println("上传成功");

    } catch (Exception e) {
        e.printStackTrace();
        Log.d(TAG, "upload fail");
        System.out.println("上传失败");
    }
}

}

  • 写回答

2条回答 默认 最新

  • qq_21994599 2015-05-12 07:57
    关注

    你可以试试Volley,不用自己写Http请求这么麻烦的

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作