1

我想编写一个可以将文件上传到交流基础网络服务器的 android 应用程序。到目前为止,我没有运气。我不断收到协议不支持的地址系列。我在清单文件中添加了 INTERNET 和 WRITE_EXTERNAL_STORAGE。请记住,我在模拟器中运行它。

任何想法或建议都非常感谢。

提前谢谢贾斯汀

无论如何,这是我的代码 Android - Uploader.java

package com.main;

import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.os.AsyncTask;
import android.util.Log;
import android.widget.TextView;

public class Uploader extends AsyncTask<Object, String, Object>
{
    URL connectURL;
    String params;
    String responseString;
    String fileName;
    byte[] dataToServer;
    FileInputStream fileInputStream;
    TextView info;

    private static final String TAG = "Uploader";

    void setUrlAndFile(String urlString, String fileName, TextView info)
    {
        Log.d(TAG,"StartUploader");
        this.info = info;
        try
        {
            fileInputStream = new FileInputStream(fileName);
            connectURL = new URL(urlString);
        }
        catch(Exception e)
        {
            publishProgress(e.toString());
        }
        this.fileName = fileName;
    }

    synchronized void doUpload()
    {
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        Log.d(TAG,"lv1");

        try
        {
            Log.d(TAG,"doUpload");
            publishProgress("Uploading...");
            HttpURLConnection conn = (HttpURLConnection)connectURL.openConnection();
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Connection","Keep-Alive");
            conn.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary);
            DataOutputStream dos  = new DataOutputStream(conn.getOutputStream());
            dos.writeBytes(twoHyphens + boundary + lineEnd);
            dos.writeBytes("Content-Disposition:form-data; name=\"uploadedfile\";filename=\"" + fileName + "\"" + lineEnd);
            dos.writeBytes(lineEnd);

            Log.d(TAG,"LvA");
            Log.d(TAG,twoHyphens + boundary + lineEnd + ";Content-Disposition:form-data; name=\"uploadedfile\";filename=\"" + fileName + "\"" + lineEnd);

            int bytesAvailable = fileInputStream.available();
            int maxBufferSize = 1024;
            int bufferSize = Math.min(bytesAvailable, maxBufferSize);

            byte[] buffer = new byte[bufferSize];

            int bytesRead = fileInputStream.read(buffer,0, bufferSize);
            Log.d(TAG,"LvB");
            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);

            fileInputStream.close();
            dos.flush();

            InputStream is = conn.getInputStream();
            int ch;
            Log.d(TAG,"LvC");
            StringBuffer buff = new StringBuffer();
            while((ch=is.read()) != -1)
            {
                buff.append((char)ch);
            }
            publishProgress(buff.toString());
            dos.close();
            Log.d(TAG,"lv2");
        }

        catch(Exception e)
        {
            publishProgress(e.toString());
        }
    }

    @Override
    protected Object doInBackground(Object... arg0) 
    {
        Log.d(TAG,"lv1a");
        doUpload();
        Log.d(TAG,"lv1b");
        return null;
    }

    protected void onProgressUpdate(String... progress)
    {
        this.info.setText(progress[0]);
    }

}

这是主要活动

package com.main;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FilePermission;
import java.io.OutputStreamWriter;
import java.net.SocketException;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;

public class ReadWriteToPCActivity extends Activity 
{
    private static final String TAG = "ReadWriteToPCActivity";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        View upload = findViewById(R.id.Upload);
        final EditText path = (EditText)findViewById(R.id.Path);
        final TextView info = (TextView)findViewById(R.id.Info);
        Log.d(TAG,"Start");

        File fn = new File(Environment.getExternalStorageDirectory()+"/new.xml");

        upload.setOnClickListener
        (
                new OnClickListener()
                {
                    public void onClick(View v)
                    {
                        try
                        {
                            Log.d(TAG,"Step1");
                            WriteFile();
                            Uploader uploader = new Uploader();
                            //uploader.setUrlAndFile("http://192.168.0.123/receiver.aspx", path.getText().toString(), info);
                            uploader.setUrlAndFile("http://192.168.0.123/personalfinance/receiver.aspx", Environment.getExternalStorageDirectory()+"/samplefile.txt", info);
                            //uploader.setUrlAndFile("http://10.0.2.2/personalfinance/receiver.aspx", Environment.getExternalStorageDirectory()+"/new.xml", info);
                            //uploader.setUrlAndFile("http://192.168.0.123/personalfinance/ReceiveUpload.aspx", Environment.getExternalStorageDirectory()+"/new.xml", info);
                            Log.d(TAG,"Upload." + Environment.getExternalStorageDirectory()+"/samplefile.txt;" + info.getText().toString());
                            uploader.execute();
                        }
                        catch(Exception e)
                        {
                            path.setText(e.toString());
                            Log.d(TAG,e.toString());
                        }
                    }

                    private void WriteFile() 
                    {
                        try
                        {
                            Log.d(TAG,"Step 1 write file");
                            File newfile = new File(Environment.getExternalStorageDirectory() + "/samplefile.txt");
                            Log.d(TAG,"Step 2 write file");
                            if(!newfile.exists() && !newfile.createNewFile())
                            {
                                Log.d(TAG,"File exists");
                            }
                            Log.d(TAG,"cp3");
                            newfile.createNewFile();
                            Log.d(TAG,"Step 3 write file");
                            FileOutputStream fos = null;
                            Log.d(TAG,"Step 4 write file");
                            fos = new FileOutputStream(newfile);
                            Log.d(TAG,"Step 5 write file");
                            OutputStreamWriter osw = new OutputStreamWriter(fos);
                            osw.write("Hello Android");
                            osw.flush();
                            osw.close();
                            FilePermission fp;
                            fp = new FilePermission(Environment.getExternalStorageDirectory()+"/samplefile.txt","read");
                            Log.d(TAG,"File created");
                        }
                        catch(Exception e)
                        {
                            Log.d(TAG,e.toString());
                        }

                    }
                }
        );


    }
}

最后,这是我的接收文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace PersonalFinance
{

    public partial class receiver : System.Web.UI.Page
    {

        protected void Page_Load(object sender, EventArgs e)
        {
            HttpFileCollection uploadFiles = Request.Files;

            HttpPostedFile postedFile = uploadFiles[0];

            System.IO.Stream inStream = postedFile.InputStream;
            byte[] fileData = new byte[postedFile.ContentLength];
            inStream.Read(fileData, 0, postedFile.ContentLength);

            postedFile.SaveAs(Server.MapPath("Data") + "\\" + postedFile.FileName);

        }
    }
}
4

0 回答 0