Stellen Sie eine Anfrage über die Android-App und laden Sie die Datei auf den lokalen Server herunter, auf dem Sie WebServer mit Go eingerichtet haben
PC Windows10 Android Studio 4.0 Kotlin 1.3.72 Android Terminal Emulator (API Level 29) Go 1.11.1
Geben Sie den Dateinamen in der Android-App an, fordern Sie ihn auf der Serverseite an, geben Sie die auf der Serverseite gespeicherte Datei und den Statuscode zurück
Server.go
package controllers
import (
"fmt"
"io/ioutil"
"net/http"
"os"
"strconv"
"strings"
)
func apiSampleHandler(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case "POST":
fmt.Println("POST")
case "GET": //Datei DL mit GET-Anfrage
fmt.Println("GET")
name := fmt.Sprint(r.URL) // 「/Holen Sie sich "Dateiname"
fileName := strings.SplitAfter(name, "/")[1] //Holen Sie sich "Dateiname"
//Überprüfen Sie, ob die Datei auf der Serverseite vorhanden ist
if fileinfo, err := os.Stat("./" + fileName); os.IsNotExist(err) || fileinfo.IsDir() {
fmt.Println("file is not exist")
w.WriteHeader(http.StatusNotFound)
return
}
buf, err := ioutil.ReadFile("./" + fileName) //Datei lesen
if err != nil {
fmt.Println("file could not be read")
w.WriteHeader(http.StatusInternalServerError)
return
}
w.Write(buf) //Schreiben Sie auf die Antwort
}
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
Legen Sie die Datei zum Herunterladen im selben Verzeichnis wie main.go ab
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>
GET Zugriff auf Server über http-Kommunikation
Net.kt
fun requestFileDownload(context: Context, requestUrl: String, fileName: String): Int {
val url = URL("$requestUrl/$fileName.txt") //Generierung von URL-Objekten
//UrlConnection-Objekterstellung
val urlConnection = url.openConnection() as HttpURLConnection
var result = ""
var responseCode = 0
try {
urlConnection.requestMethod = "GET" // POST,GET etc.
urlConnection.doInput = true //Antwortkörper empfangen
urlConnection.useCaches = false //Verwendung des Cache
urlConnection.connect() //Stellen Sie eine Verbindung her
responseCode = urlConnection.responseCode //Antwortcode abrufen
when (responseCode) {
HttpURLConnection.HTTP_OK -> { //Wird nur verarbeitet, wenn der Antwortcode 200 lautet: OK
val path = context.filesDir.toString() + "/" + fileName + FILE_EXPAND
//Lesen Sie den Inhalt der Antwort
DataInputStream(urlConnection.inputStream).use { fileInputStream ->
//Erstellen und schreiben Sie eine Datei
DataOutputStream(BufferedOutputStream(FileOutputStream(path))).use {
val buffer = ByteArray(BUFFER_SIZE)
var byteRead: Int
do {
byteRead = fileInputStream.read(buffer)
if (byteRead == -1) {
break
}
it.write(buffer, 0, byteRead)
} while (true)
}
}
}
}
} catch (e: Exception) {
Log.e("Net", "#startConnection$e")
} finally {
urlConnection.disconnect()
}
return responseCode
}
}
Bestätigen Sie die IP-Adresse des Servers (PCs), auf den Sie zugreifen möchten, indem Sie an der Eingabeaufforderung Folgendes ausführen
>ipconfig
Setzen Sie http: // {bestätigte IP-Adresse}: 8080 in requestUrl von Net # requestFileDownload Legen Sie den Dateinamen, der heruntergeladen werden soll, in Dateiname von Net # requestFileDownload fest und führen Sie ihn aus
Stellen Sie sicher, dass die Datei im anwendungsspezifischen Bereich generiert wird (unter `` `/ data / data / {Paketname} / files```). Zeigen Sie Dateien auf dem Gerät mit dem Gerätedateie-Explorer an (https://developer.android.com/studio/debug/device-file-explorer?hl=ja) )
Die gesamte Quelle ist hier Das Zugriffsziel, RequestMethod und der Dateiname können in der App dynamisch geändert werden.
Klicken Sie hier, um Dateien auf den Server hochzuladen (https://qiita.com/kurramkurram/items/262cd1d2f01dcb6fa8bd).
Package http Überprüfen Sie, ob Dateien und Verzeichnisse in Go-Sprache (Golang) vorhanden sind [Golang] Beispiel zum Lesen von Dateien