0

私はアプリケーションを開発しており、以下のコードを使用してファイルを .net サーバーにアップロードしています。

public class HttpFileUpload implements Runnable{

    URL connectURL;
    String responseString;
    String Title;
    String Description;
    byte[ ] dataToServer;
    FileInputStream fileInputStream = null;

    public HttpFileUpload(String urlString, String vTitle, String vDesc){
        try{
                connectURL = new URL(urlString);
                Title= vTitle;
                Description = vDesc;
        }catch(Exception ex){
            Log.i("HttpFileUpload","URL Malformatted");
        }
    }    
    public void Send_Now(FileInputStream fStream){
            fileInputStream = fStream;
            Sending();
}



    void Sending(){
    //    String iFileName = "ovicam_temp_vid.mp4";
        String iFileName = CONST.USER_NAME+".db";
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        String Tag="fSnd";
        try
        {
                Log.i(Tag,"Starting Http File Sending to URL");

                // Open a HTTP connection to the URL
                HttpURLConnection conn = (HttpURLConnection)connectURL.openConnection();

                // Allow Inputs
                conn.setDoInput(true);

                // Allow Outputs
                conn.setDoOutput(true);

                // Don't use a cached copy.
                conn.setUseCaches(false);

                // Use a post method.
                conn.setRequestMethod("POST");

                conn.setRequestProperty("Connection", "Keep-Alive");

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

                conn.setRequestProperty("FILE_NAME", ""+CONST.USER_NAME+".db");

                DataOutputStream dos = new DataOutputStream(conn.getOutputStream());

                dos.writeBytes(twoHyphens + boundary + lineEnd);
                dos.writeBytes("Content-Disposition: form-data; name=\"title\""+ lineEnd);
                dos.writeBytes(lineEnd);
                dos.writeBytes(Title);
                dos.writeBytes(lineEnd);
                dos.writeBytes(twoHyphens + boundary + lineEnd);

                dos.writeBytes("Content-Disposition: form-data; name=\"description\""+ lineEnd);
                dos.writeBytes(lineEnd);
                dos.writeBytes(Description);
                dos.writeBytes(lineEnd);
                dos.writeBytes(twoHyphens + boundary + lineEnd);

                dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + iFileName +"\"" + lineEnd);
                dos.writeBytes(lineEnd);

                Log.i(Tag,"Headers are written");

                // create a buffer of maximum size
                int bytesAvailable = fileInputStream.available();

                int maxBufferSize = 1024;
                int bufferSize = Math.min(bytesAvailable, maxBufferSize);
                byte[ ] buffer = new byte[bufferSize];

                // read file and write it into form...
                int bytesRead = fileInputStream.read(buffer, 0, bufferSize);

                while (bytesRead > 0)
                {
                        dos.write(buffer, 0, bufferSize);
                        bytesAvailable = fileInputStream.available();
                        bufferSize = Math.min(bytesAvailable,maxBufferSize);
                        bytesRead = fileInputStream.read(buffer, 0,bufferSize);
                }
                dos.writeBytes(lineEnd);
                dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

                // close streams
                fileInputStream.close();

                dos.flush();

                Log.i(Tag,"File Sent, Response: "+String.valueOf(conn.getResponseCode()));

                InputStream is = conn.getInputStream();

                // retrieve the response from server
                int ch;

                StringBuffer b =new StringBuffer();
                while( ( ch = is.read() ) != -1 ){ b.append( (char)ch ); }
                String s=b.toString();
                Log.i("Response",s);
                dos.close();
        }
        catch (MalformedURLException ex)
        {
                Log.i(Tag, "URL error: " + ex.getMessage(), ex);
        }

        catch (IOException ioe)
        {
                Log.i(Tag, "IO error: " + ioe.getMessage(), ioe);
        }
}


    @Override
    public void run() {
        // TODO Auto-generated method stub

    }

}

そしてここで私はこれを呼び出します:

public void UploadFile(String path) throws IOException{
         try {
             // Set your file path here
         //    FileInputStream fstrm = new FileInputStream(Environment.getExternalStorageDirectory().toString()+"/DCIM/file.mp4");
             Log.i("Upload file path: ",path);
             FileInputStream fstrm = new FileInputStream(path);
               Log.i("FileInputStream", ""+fstrm);

             // Set your server page url (and the file title/description)

               HttpFileUpload hfu = new HttpFileUpload("http://192.168.1.112/abc/", "ZoneSoft","Database file");

             hfu.Send_Now(fstrm);

           } catch (FileNotFoundException e) {
             // Error: File not found
               Log.e("FileNotFoundException: ", e.getMessage());
           }
         }




   try {
                            String selectedFilePath = Environment.getExternalStorageDirectory().getPath()+"/"+CONST.USER_NAME+".db";
                            Log.i("selectedFilePath: ", selectedFilePath);
                            UploadFile(selectedFilePath);
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

私が送信したファイルを処理するためにサーバー側でコーディングする必要はありますか?

4

2 に答える 2

0

このようなことを試してください

InputStream is = new FileInputStream("DB path"); 
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
while ((int bytesRead = is.read(b)) != -1) {
   bos.write(b, 0, bytesRead);
}
byte[] bytes = bos.toByteArray();
byte[] dataToSend = Base64.encode(bytes, Base64.DEFAULT);
....... //webservice to go///

次に、これdataToSendを Android からサービスに送信します。この配列は、.net に保存する必要があります。または、そのバイト[]を読み取って、関連するファイル形式に変換できます

于 2013-11-15T06:50:56.490 に答える