Richten Sie einen lokalen Server mit Go-File-Upload ein.

zunaechst

Richten Sie WebServer in Go ein und laden Sie Dateien von der Android-App hoch

Umgebung

PC Windows10 Android Studio 4.0 Kotlin 1.3.72 Android Terminal Emulator (API Level 29) Go 1.11.1

Diagramm

go_server.png Senden Sie eine Datei von der Android-App, speichern Sie sie auf der Serverseite und geben Sie den Statuscode vom Server an die App zurück

Implementierung

Lokaler Server

Server.go


package controllers

import (
	"fmt"
	"net/http"
	"io/ioutil"
	"os"
)

func apiSampleHandler(w http.ResponseWriter, r *http.Request) {
	switch(r.Method) {
		case "POST":
			fmt.Println("POST")
            //Holen Sie sich hochgeladene Dateien und Header
			file, fileHeader, _ := r.FormFile ("upload_file") 
			fileName := fileHeader.Filename //Dateinamen aus dem Header abrufen
			defer file.Close()              //Schließen Sie die Datei am Ende
			data, _ := ioutil.ReadAll(file) //Datei lesen
			saveFile, _ := os.Create(fileName) //Generieren Sie eine Datei zum Speichern
			defer saveFile.Close()          //Schließen Sie die Datei zum Speichern am Ende
			_, err = saveFile.Write(data)   //In Datei schreiben
			if err != nil {
				fmt.Println("can not write file")
				w.WriteHeader(http.StatusBadRequest)
				return
			}
		case "GET":
			fmt.Println("GET")
	}
    // 200:Gibt OK zurück
	w.WriteHeader(http.StatusOK)
}

// main.Rufen Sie von go an, um den Server zu starten
func StartWebServer() error {
	http.HandleFunc("/", apiSampleHandler)
	return http.ListenAndServe(":8080", nil)
}

Führen Sie main.go aus und starten Sie den Server Gehen Sie zu http: // localhost: 8080 und stellen Sie sicher, dass der Server aktiv ist

Android App

1.Androidmanifest.xml

Definieren Sie die Berechtigung zum Zugriff auf das Internet

AndroidManifest.xml


<uses-permission android:name="android.permission.INTERNET" />

Da die http-Kommunikationseinstellung von Android 9.0 deaktiviert ist, setzen Sie `` `usedCleartextTrafic``` auf true

AndroidManifest.xml


<application
Kürzung
    android:usesCleartextTraffic="true">
    <activity android:name=".MainActivity">
Kürzung
    </activity>
</application>
  1. Datei generieren

Generieren Sie eine Textdatei im anwendungsspezifischen Bereich des Android-Geräts (unter `` `/ data / data / {Paketname} / files```).

File.kt


const val FILE_EXPAND = ".txt"

class File {
    fun makeTxtFile(context: Context, fileName: String, str: String) {
        try {
            context.openFileOutput(fileName + FILE_EXPAND, Context.MODE_PRIVATE).use {
                it.write(str.toByteArray())
            }
        } catch (e: IOException) {
            Log.e("File", "#makeTxtFile $e")
        }
    }
}

Bestätigen Sie die Dateierzeugung Zeigen Sie Dateien auf dem Gerät mit dem Gerätedateie-Explorer an (https://developer.android.com/studio/debug/device-file-explorer?hl=ja) )

    1. Serverzugriff

Lesen Sie die Datei und senden Sie sie per http-Kommunikation

Net.kt


 fun startConnection(context: Context, requestUrl: String, requestMethod: String, fileName: String): Pair<Int, String> {
        val url = URL(requestUrl)                      //Generierung von URL-Objekten
        //UrlConnection-Objekterstellung
        val urlConnection = url.openConnection() as HttpURLConnection 
        var result = ""
        var responseCode = 0
        try {
            val boundary = "--------------------------" 
            urlConnection.requestMethod = requestMethod // POST,GET etc.
            urlConnection.doOutput = true               //Anfragetext senden
            urlConnection.doInput = true                //Antwortkörper empfangen
            urlConnection.useCaches = false             //Verwendung des Cache
            // multipart/form-Daten: Mehrere Daten senden, Grenze: Trennung zwischen mehreren Daten
            urlConnection.setRequestProperty(
                "Content-Type",
                "multipart/form-data; boundary=$boundary" 
            )
            val filePath = context.filesDir             //App-spezifischer Bereichspfad
            val file = File("$filePath/$fileName$FILE_EXPAND") //Dateiobjekt erstellen
            FileInputStream(file).use { fileInputStream ->
                urlConnection.connect()                 //Stellen Sie eine Verbindung her
                DataOutputStream(urlConnection.outputStream).use {
                   it.writeBytes(                       //Kopfzeile setzen
                       TWO_HYPHEN + boundary + LINE_END +
                               "Content-Disposition: form-data; name=\"upload_file\"; " +
                               "filename=\"$fileName$FILE_EXPAND\"$LINE_END" +
                               "Content-Type: application/octet-stream$LINE_END$LINE_END"
                   )
                   //Datei schreiben
                   val buffer = ByteArray(BUFFER_SIZE)
                   var bytesRead: Int
                   do {
                       bytesRead = fileInputStream.read(buffer)
                       if (bytesRead == -1) break
                       it.write(buffer, 0, bytesRead)
                   } while (true)
                   it.writeBytes(                       //Fußzeileneinstellungen
                        LINE_END + TWO_HYPHEN + boundary + TWO_HYPHEN + LINE_END
                   )
                   it.flush()
                }
            }
            responseCode = urlConnection.responseCode   //Antwortcode abrufen
 
            BufferedReader(InputStreamReader(urlConnection.inputStream)).use {
                val sb = StringBuffer()
                for (line in it.readLines()) {
                    line.let { sb.append(line) }
                }
                result = sb.toString()
            }
        } catch (e: Exception) {
            Log.e("Net", "#startConnection$e")
        } finally {
            urlConnection.disconnect()
        }
        return responseCode to result
    }
}

Vier. Bestätigung der IP-Adresse

Bestätigen Sie die IP-Adresse des Servers (PCs), auf den Sie zugreifen möchten, indem Sie an der Eingabeaufforderung Folgendes ausführen

>ipconfig

Fünf. Verbinden Sie PC und Android-Gerät mit derselben Netzwerkumgebung

  1. Verbinde dich mit Android

Setzen Sie http: // {bestätigte IP-Adresse}: 8080 in requestUrl von Net # startConnection und führen Sie die Anwendung aus

Bestätigen Sie das Hochladen der Datei

Überprüfen Sie das gleiche Verzeichnis wie main.go auf Ihrem PC Schließen Sie ab, wenn die Datei erstellt wurde

Schließlich

Die gesamte Quelle ist hier Das Zugriffsziel, RequestMethod und der Dateiname können in der App dynamisch geändert werden.

Verweise

Gehen Sie zur Serverseite

Datei in Go-Sprache hochladen

Android App Seite

[Android] Dateien in der App FileOutputStream, FileInputStream speichern Upload File To Server - Android Example [Android] while-FileInputStream.read-Fehler in Kotlin [Kotlin] Ich möchte mehrere Werte zurückgeben!

Recommended Posts

Richten Sie einen lokalen Server mit Go-File-Upload ein.
Richten Sie einen lokalen Server mit Go-File-Download ein.
Richten Sie mit Docker einen Samba-Server ein
Richten Sie einen einfachen HTTPS-Server mit Asyncio ein
So richten Sie einen lokalen Entwicklungsserver ein
Richten Sie einen einfachen lokalen Server auf Ihrem Mac ein
[Vagrant] Richten Sie einen einfachen API-Server mit Python ein
Richten Sie einen Webserver mit CentOS7 + Anaconda + Django + Apache ein
Richten Sie mit Twisted einen Mailserver ein
Richten Sie mit Python 3 einen einfachen HTTPS-Server ein
Erstellen Sie einen lokalen Server mit einem einzeiligen Befehl [Mac]
Senden Sie E-Mails mit mailx an einen mit Python eingerichteten Dummy-SMTP-Server.
Richten Sie einen Test-SMTP-Server in Python ein.
Richten Sie einen UDP-Server in der Sprache C ein
Richten Sie mit http.server in Python 3 in 30 Sekunden einen lokalen Webserver ein
Richten Sie einen einfachen SMTP-Server in Python ein
Lokaler Server mit Python
Richten Sie einen Minecraft-Ressourcenserver (Spigot) über Docker (2) ein.
Richten Sie mit Samba einen Dateiserver unter Ubuntu 20.04 ein
Richten Sie in 30 Minuten einen kostenlosen Server unter AWS ein
[Teil 1] Lassen Sie uns einen Micra-Server unter Linux einrichten
Richten Sie einen Minecraft-Ressourcenserver (Spigot) über Docker ein
Richten Sie mit Sublime Text 2 eine Python-Entwicklungsumgebung ein
Richten Sie eine Python-Entwicklungsumgebung mit Visual Studio Code ein
Laden Sie den mit Gunicorn eingerichteten Server neu, wenn Sie den Code ändern
Richten Sie mit Django ein soziales Login ein
Richten Sie pygit2 mit statischem Link ein
Erstellen eines Flask-Servers mit Docker
Stellen Sie die Lambda-Funktion ein und lassen Sie sie mit S3-Ereignissen arbeiten!
Holen Sie sich mit Docker eine lokale Umgebung für DynamoDB
Zeichnen Sie ein Mandelbrot-Set mit Brainf * ck
Richten Sie mit CentOS Linux 8 + Apache mod_ssl einen Reverse-Proxy für den https-Server ein
Einführung und Verwendung der Python-Flasche ・ Versuchen Sie, einen einfachen Webserver mit Anmeldefunktion einzurichten
Richten Sie einen Server ein, der mehrere Verbindungen gleichzeitig verarbeitet
Janken Poi mit Python Lassen Sie uns für Anfänger auf einem lokalen Windows-Server laufen
Als ich mit VScode eine Verbindung zu einem entfernten Jupyter-Server herstellte, war dieser entfernt, aber lokal.
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
Starten Sie einen temporären http-Server lokal mit Pytest
Richten Sie golang mit goenv unter GNU / Linux ein
Starten Sie mit Docker einen einfachen Python-Webserver
Spielen Sie den Server mit zwei PCs
Starten Sie einen Webserver mit Python und Flask
Richten Sie eine Python-Entwicklungsumgebung auf Marvericks ein
Hängen Sie das Verzeichnis eines anderen Servers mit sshfs ein
Erstellen Sie in Tornado einen HTTP-Server (Hello World)
So bereiten Sie die Umgebung mit Courseras fortgeschrittenem Kurs für maschinelles Lernen auf Google Colab vor
Erstellen Sie Server in Linux und lokalen Netzwerken mit Raspberry Pi NextCloud und Desktop-Sharing
Ich möchte mit swagger-codegen in Sekundenschnelle einen Mock-Server für Python-Flask einrichten.
Richten Sie mit samba einen Dateiserver mit ZeroPi von Friendly Arm ein [Gekaufte Artikel]
Richten Sie mit samba einen Dateiserver mit ZeroPi von Friendly Arm ein [Persönlicher Import]
Erstellen Sie mit Python + Flask einen animierten lokalen GIF-Server
Richten Sie eine Entwicklungsumgebung für die Verarbeitung natürlicher Sprache ein
So richten Sie eine Python-Umgebung mit pyenv ein
Ich habe mit Play with Docker einen gebrauchsfertigen Syslog-Server erstellt
Die Geschichte, eine harte Zeit mit der gemeinsamen Menge HTTP_PROXY = ~ zu haben
Richten Sie Docker unter Oracle Linux (7.x) mit Vagrant ein
Ein Server, der POST-Daten mit flask / python wiedergibt
Erstellen Sie einen Home Music Server mit Centos8 + Universal Media Server
[Python] Ich habe versucht, einen lokalen Server mit flask auszuführen