簡體   English   中英

通過 java 中的 HTTP 接收文件:文件損壞

[英]receiving files via HTTP post in java: Files corrupted

我剛剛編寫了一個 HTTP 服務器,它通過 HTTP 接收 POST 請求。 特別是它接收請求作為多部分表單數據:

POST / HTTP/1.1
Host: 192.168.7.4:5000
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------197987737412371961922053527775
Content-Length: 4306786


-----------------------------197987737412371961922053527775
Content-Disposition: form-data; name="filename"

poison.mp3
-----------------------------197987737412371961922053527775
Content-Disposition: form-data; name="prova"

provaV
-----------------------------197987737412371961922053527775
Content-Disposition: form-data; name="datafile"; filename="01-Poison.mp3"
Content-Type: audio/mpeg

file......

在 Header 之后,每個輸入都被加密為以下形式:

-----------------197987737412371961922053527775 Conten_disposition...\r\n\r\n“輸入內容”

最后一個包含二進制形式的文件。

這是我的服務器,它首先獲取 header 中包含的所有信息,然后嘗試重建文件。 如果我從本地機器發送請求,它工作正常,但如果我嘗試從遠程客戶端發送文件,它會損壞文件。 我正在使用直接從套接字打開的簡單 InputStream。

這是嘗試創建發送文件的方法:

private void payloadFileCreation(InputStream in,boolean t1, FileOutputStream fos, long filesize ) throws IOException{

    int dyn_data_index=0;
    int chunk=2048;
    byte[] dyn_data = new byte[chunk];
    int av = in.available();
    while (filesize>chunk){
           in.read(dyn_data,0,chunk);
           fos.write(dyn_data,0,chunk);
       fos.flush();
       filesize -= chunk;

    }
    in.read(dyn_data,0,(int) filesize );
    fos.write(dyn_data,0, (int) filesize);
    fos.flush();
    fos.close();

    }

有任何想法嗎? 謝謝

您可以使用Apache Commons FileUpload庫來解析多部分表單請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM