简体   繁体   English

用于上传文件的Java小程序

[英]Java applet to upload a file

I am looking for a Java applet to read a file from client machine and creat a POST request for PHP server uploading. 我正在寻找一个Java applet来从客户机读取文件并为PHP服务器上传创建一个POST请求。

PHP script on server should receive the file as normal file upload in FORM submit. 服务器上的PHP脚本应该在FORM提交中接收文件作为普通文件上传。 I am using the following code. 我使用以下代码。 The file contents are passed to PHP script but they are not correctly converted to an image. 文件内容将传递给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();

Here is some code that might help you it's from one of my old projects with a bunch of unrelated stuff removed, take it for what it's worth. 这里有一些代码可以帮助你从我的一个旧项目中移除一堆不相关的东西,把它当作它的价值。 Basically, I think the code in your question is missing some parts that the HTTP protocol requires 基本上,我认为你的问题中的代码缺少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);
    }

}

I'd suggest you take a look at Gallery Remote . 我建议你看一下Gallery Remote This is an open source project for uploading photos to a PHP backend. 这是一个用于将照片上传到PHP后端的开源项目。 It's a bit more full featured than what you may need, but you should be able to modify the code to your needs fairly easily. 它比您可能需要的功能更全面,但您应该能够相当容易地修改代码以满足您的需求。

You could also look at JUpload . 你也可以看看JUpload It's not as full featured, but it is open source and capable of the task. 它不是功能齐全,但它是开源的,能够完成任务。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM