Как отправить файл в службу REST? - PullRequest
0 голосов
/ 10 ноября 2018

Я хочу получить файл в сервисе отдыха от Android. В моем коде я посылаю filestream с Android через url. Если я использую так, то мое приложение не работает, говоря ...

Logcat

Операция Fileacces в контракте "IREST" имеет переменную запроса с именем stream типа System.IO.FileStream, но типа System.IO.FileStream не конвертируется по QueryStringConverter. Переменные для значений запроса UriTemplate должны иметь типы, которые могут быть преобразован QueryStringConverter

Здесь у меня есть сообщение моего кодирования БЮР

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == FILE_PICKER_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
                Uri content_describer = data.getData();

                String src = null;
                try {
                    src = getFilePath(UploadActivity.this, content_describer);
                } catch (URISyntaxException e) {
                    e.printStackTrace();
                }
                Log.d("src is: ", src);
                source = new File(src);
                 fname = source.getName();

                Button text = (Button) findViewById(R.id.txt);
                text.setText(fname);


                text.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        try {
                            FileOpen.openFile(UploadActivity.this, source);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                });


            }
        }

Событие Onclick на значке панели действий:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.mybutton) {
           new Save().execute();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

СОХРАНИТЬ функцию asynctask

private class Save extends AsyncTask<String,Void,String> {

        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... params) {
            try {
                fis=new FileInputStream(source);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }

            ServiceHandler jsonParser = new ServiceHandler();
            String fileaccess = ip+"Mobile/rest.svc/Fileacces?stream="+fis+"&filename="+fname;
            Log.d("Fileaccess","fileaccess"+fileaccess);
            String result = jsonParser.makeServiceCall(fileaccess, ServiceHandler.GET);
            Log.i("fileaccess", "result: > " + result);
            return  null;
        }


        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            System.out.println(s);

        }

    }

Моя функция отдыха в vb.net

 Public Function fileacces(ByVal stream As FileStream, ByVal filename As String) As String Implements IREST.fileacces
        Dim result = ""

        Try

            Dim path = "D:\XXX\YYY\ECM Source\Archive\EZECM\Settings\Monitor\" + filename
            Dim fileStream = New FileStream(path, FileMode.Create, FileAccess.Write)
            stream.CopyTo(fileStream)
            fileStream.Dispose()
            result = "file uploaded"


        Catch ex As Exception

        End Try
        Return result
    End Function

1 Ответ

0 голосов
/ 10 ноября 2018

любезно используйте базу 64

вот так

public void uploadFile(final String selectedFilePath) {
    try {


        FileInputStream inputStream = new FileInputStream(selectedFilePath);
        byte[] byteArray = IOUtils.toByteArray(inputStream);

        final String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
              //  tvFileName.setText(encoded);
                Log.e("File Base 64",encoded);
                filebas64=encoded;
            }
        });


    } catch (FileNotFoundException e) {
        e.printStackTrace();
        Log.e("Error",e.toString());

    } catch (IOException e) {
        e.printStackTrace();
        Log.e("Error",e.toString());

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...