Java-апплет для загрузки файла

Я ищу апплет Java для чтения файла с клиентского компьютера и создания запроса POST для загрузки сервера PHP.

PHP-скрипт на сервере должен получить файл как обычную загрузку файла в отправке FORM. Я использую следующий код. Содержимое файла передается PHP-скрипту, но неправильно преобразуется в изображение.

//uploadURL will be a url of PHP script like
// http://www.example.com/uploadfile.php

URL url = new URL(uploadURL);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("POST");
con.setDoInput(true);
con.setDoOutput(true);

InputStream is = new FileInputStream("C://img.jpg");
OutputStream os = con.getOutputStream();
byte[] b1 = new byte[10000000];
int n;
while((n = is.read(b1)) != -1) {
os.write("hello" , 0, 5);
test += b1;

}
con.connect();

person user189352    schedule 21.10.2009    source источник
comment
Где вы на самом деле записываете ввод в вывод? Насколько я понимаю, единственное, что вы пишете в соединение, — это строка hello.   -  person Paul Tomblin    schedule 21.10.2009


Ответы (2)


Вот некоторый код, который может вам помочь, это из одного из моих старых проектов с кучей несвязанных вещей, удаленных, примите это за то, что оно того стоит. По сути, я думаю, что в коде вашего вопроса отсутствуют некоторые части, которые требуются протоколу HTTP.

public class UploaderExample
{
    private static final String Boundary = "--7d021a37605f0";

    public void upload(URL url, List<File> files) throws Exception
    {
        HttpURLConnection theUrlConnection = (HttpURLConnection) url.openConnection();
        theUrlConnection.setDoOutput(true);
        theUrlConnection.setDoInput(true);
        theUrlConnection.setUseCaches(false);
        theUrlConnection.setChunkedStreamingMode(1024);

        theUrlConnection.setRequestProperty("Content-Type", "multipart/form-data; boundary="
                + Boundary);

        DataOutputStream httpOut = new DataOutputStream(theUrlConnection.getOutputStream());

        for (int i = 0; i < files.size(); i++)
        {
            File f = files.get(i);
            String str = "--" + Boundary + "\r\n"
                       + "Content-Disposition: form-data;name=\"file" + i + "\"; filename=\"" + f.getName() + "\"\r\n"
                       + "Content-Type: image/png\r\n"
                       + "\r\n";

            httpOut.write(str.getBytes());

            FileInputStream uploadFileReader = new FileInputStream(f);
            int numBytesToRead = 1024;
            int availableBytesToRead;
            while ((availableBytesToRead = uploadFileReader.available()) > 0)
            {
                byte[] bufferBytesRead;
                bufferBytesRead = availableBytesToRead >= numBytesToRead ? new byte[numBytesToRead]
                        : new byte[availableBytesToRead];
                uploadFileReader.read(bufferBytesRead);
                httpOut.write(bufferBytesRead);
                httpOut.flush();
            }
            httpOut.write(("--" + Boundary + "--\r\n").getBytes());

        }

        httpOut.write(("--" + Boundary + "--\r\n").getBytes());

        httpOut.flush();
        httpOut.close();

        // read & parse the response
        InputStream is = theUrlConnection.getInputStream();
        StringBuilder response = new StringBuilder();
        byte[] respBuffer = new byte[4096];
        while (is.read(respBuffer) >= 0)
        {
            response.append(new String(respBuffer).trim());
        }
        is.close();
        System.out.println(response.toString());
    }

    public static void main(String[] args) throws Exception
    {
        List<File> list = new ArrayList<File>();
        list.add(new File("C:\\square.png"));
        list.add(new File("C:\\narrow.png"));
        UploaderExample uploader = new UploaderExample();
        uploader.upload(new URL("http://systemout.com/upload.php"), list);
    }

}
person Lauri Lehtinen    schedule 21.10.2009

Я бы посоветовал вам взглянуть на Gallery Remote. Это проект с открытым исходным кодом для загрузки фотографий в серверную часть PHP. Он немного более полнофункциональный, чем вам может понадобиться, но вы сможете довольно легко модифицировать код под свои нужды.

Вы также можете посмотреть на JUpload. Он не такой полнофункциональный, но с открытым исходным кодом и способен справиться с этой задачей.

person brianegge    schedule 21.10.2009
comment
В состав проекта входит апплет. Единый источник — это стандартное приложение, апплет вне браузера и апплет в браузере. См. codex.gallery2.org/Gallery2:Modules:uploadapplet. - person brianegge; 21.10.2009