-3

我正在尝试将图像上传到图像托管站点 (fastpic.ru),但我无法得到预期的正确响应。我用提琴手检查我是否会发送正确的参数,一切似乎都很好,但我无法得到正确的回应。您能指导我如何以正确的方式上传和获得回复吗?

正确的回应我的意思是我应该收到类似http://fastpic.ru/session/2012/0425/Y6sEtGjtT1.html但我只收到http://fastpic.ru/index.php

谢谢

这是我的代码

    String urlToConnect = "http://fastpic.ru/uploadmulti";
    String boundary = Long.toHexString(System.currentTimeMillis()); // Generate random boundary
    URLConnection connection = new URL(urlToConnect).openConnection();
    connection.setDoOutput(true); // This sets request method to POST.
    connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
    OutputStream output = null;
    PrintWriter writer = null;
    try {
        output = connection.getOutputStream();
        writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"), true); // true = Autoflush, important!

        writer.println("-----------------------------" + boundary);
        writer.println("Content-Disposition: form-data; name=\"file[]\"; filename=\"" + fileToUpload.getName() + "\"");
        writer.println("Content-Type: image/jpeg");
        writer.println();
        InputStream input = null;
        try {
            input = new FileInputStream(fileToUpload);
            byte[] buffer = new byte[1024];
            for (int length = 0; (length = input.read(buffer)) > 0;) {
                output.write(buffer, 0, length);
            }
            output.flush();
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException logOrIgnore) {
                }
            }
        }
        writer.println();

        writer.println("-----------------------------" + boundary);
        writer.println("Content-Disposition: form-data; name=\"submit\"");
        writer.println();
        writer.println("Загрузить");

        writer.println("-----------------------------" + boundary);
        writer.println("Content-Disposition: form-data; name=\"uploading\"");
        writer.println();
        writer.println("1");
        writer.println("-----------------------------" + boundary + "--");

    } finally {
        if (writer != null) {
            writer.close();
        }
    }

    BufferedReader in = new BufferedReader(
                                new InputStreamReader(
                                connection.getInputStream()));
    String decodedString;
    while ((decodedString = in.readLine()) != null) {
        System.out.println(decodedString);
    }
    in.close();
4

1 回答 1

1

如果它没有返回正确的输出,则输入可能有问题。

我建议使用 Apache HTTP 组件,例如MultipartEntityhttp://hc.apache.org/httpcomponents-client-ga/httpmime/apidocs/org/apache/http/entity/mime/MultipartEntity.html发布这种数据。如果您尝试手动对数据进行编码,很容易犯一个简单的错误,从而导致整个事情停止工作。有很多使用 Apache 组件的示例,而且使用起来非常简单。

于 2012-04-25T06:06:27.007 回答