-3
votes

Comment créer un fichier et insérer des octets dans ce fichier dans le noyau .NET?

Mon problème est quand je crée ce contrôleur: xxx

Lorsque j'essaie cette demande sur Swagger, cela me permet de télécharger un fichier. Lorsque je télécharge le fichier, le contenu est le suivant:

système.byte []

mais quand je teste cela sur Swagger: xxx

Le résultat de B est:

dgvzda ==

Je ne veux pas voir test ou system.byte [] à l'intérieur du fichier créé Je veux voir le résultat de B sur la création de fichier.


14 commentaires

Pourriez-vous clarifier exactement ce que vous attendez de voir dans le dossier? Ce n'est pas clair ce que vous essayez d'atteindre, ou pourquoi vous convertissez entre binaires et texte.


Devrait vérifier que "texte / plaine"


Qu'est-ce que exactement voulez-vous dire par "Données binaires"? Tout ce qui passe sur le fil est binaire à la fin. Quels octets exacts vous attendez-vous à être dans ce Morthstream ? 4 octets, un pour chaque personnage? Ou une représentation textuelle (par exemple en heex)?


@Jonskeet je mettez à jour mon billet.


Votre édition n'a pas de sens pour moi - car la valeur du mot mot est "test" . Ce que vous avez prétendu être le résultat est la version codée de base64 des octets codés par ASCII de "test". Où voyez-vous ce résultat? Veuillez éditer votre question pour en faire beaucoup plus clairement - pendant que ce n'est pas clair, nous ne pourrons pas pouvoir vous aider.


@ Bradbury9 Si je supprimais "Texte / Uni" J'ai cette erreur: "L'en-tête contient des valeurs non valides à l'index 0: 'License.dat'"


@ user10863293, si vous souhaitez avoir des données binaires, vous devez spécifier le bon contenu de type de contenu. Dans votre exemple, il y a "text / plain".


@Jonskeet i Modifier.


Lorsque vous faites txtbuilder.append (b); la base objet.tostring () de octet [] est ajouté. Vous ne pouvez pas ajouter d'octets à la chaîne à moins que vous ne les reconquise d'une manière ou d'une autre.


Ce n'est toujours pas clair où vous voyez ce résultat. Quelque chose convoque cette information en base64, et il n'est pas clair si vous Vous voulez base64 données ou non. Si vos données ne sont que du texte pour commencer, pourquoi n'utilisez-vous pas simplement fichier (coding.utf8.getbytes (mot), "texte / plaine", "licence.dat") ?


@Jonskeet parce que quand je fais que je ne peux pas télécharger mon fichier. Et si je fais ce fichier (encoding.utf8.getbytes (Word), "application / octère-flux", "licence.dat"), mon fichier est vide.


Il a l'air écrit beaucoup complexe que possible.


@ user10863293: Cela suggère la façon dont vous téléchargez le fichier du fichier peut être cassé, mais nous ne pouvons pas voir que ...


Bien que j'ai la solution, je n'ai toujours aucune idée, comment il pourrait obtenir une chaîne de base64 convertie de la matrice d'octet. Je ne reçois toujours que la chaîne "System.Byte []" Retourne.


3 Réponses :


0
votes

Vérifiez la réponse suivante. Vous devriez avoir une solution de bonne solution: Renvoyer le CSV du contrôleur de base .NET

TL; DR: Utilisez la fileresult au lieu d'iacctionResult ou définissez l'en-tête de disposition de contenu.

Un autre très bon article: Comment retourner des fichiers de API Web

Explication sur: Systeme.Byte []

Je suppose que depuis que vous avez défini le type de contenu sur "Texte / Plain", il y a une conversion .Tostring () quelque part. Regardez le premier Conneto à cette question. "" System.byte [] "est retourné au lieu de les données réelles

Array ne remplace pas cette méthode, donc pour les tableaux, il renvoie le nom de type - c'est la mise en œuvre par défaut.


2 commentaires

J'essaie mais rien ne fonctionne pour moi: /


@ user10863293 Cochez ma réponse -> Stackoverflow.com/a/55847016/2487565 .



0
votes

Je ne suis pas sûr, que voulez-vous dire avec le résultat "dgvzda =="

mais cette simple fonctionne: p> xxx pré>

Je reçois un fichier avec " Testez "à l'intérieur. p>

mais vous devriez mieux utiliser p> xxx pré>

et, de cource, vous pouvez utiliser UTF8 au lieu d'ASCII P>

byte[] b = Encoding.UTF8.GetBytes(word);


4 commentaires

Bien sûr, vous pouvez utiliser UTF 8 au lieu d'ASCII


Oui mais je ne veux pas avoir de fichier avec test à l'intérieur. Lorsque je fais une console.writine d'encoding.ascii.getbytes (Word), j'ai ce résultat sur mon API DGVZDA == Je souhaite également avoir le même résultat dans mon fichier quand il sera créé.


@ user10863293. Que voulez-vous avoir au lieu de "test"? Si vous souhaitez avoir du texte du paramètre Word , supprimez le mot ligne = "Test";


@ user10863293: alors vous devez clarifier ce que vous faire veux. C'est vraiment, vraiment pas clair ce que vous voulez, comment vous téléchargez le fichier, etc.



1
votes

OK, je vous ai.

C'est ce que vous voulez: xxx


2 commentaires

C'est juste moi ou cela n'a rien à voir avec " i veux à avoir bylary Data dans Le fichier = "Pourtant, il est utile de OP? Les coments OP dans la question étaient mal écussés


@ Bradbury9 Yep, tu as raison. Mais cela n'a plus d'importance. Il est déjà effacé.